프로젝트 항목의 속성 유지
프로젝트 항목에 추가하는 속성(예: 원본 파일 작성자)을 유지할 수 있습니다. 프로젝트 파일에 속성을 저장하여 이 작업을 수행할 수 있습니다.
프로젝트 파일에서 속성을 유지하는 첫 번째 단계는 프로젝트의 계층 구조를 IVsHierarchy 인터페이스로 가져오는 것입니다. Automation을 사용하거나 IVsMonitorSelection을 사용하여 이 인터페이스를 가져올 수 있습니다. 인터페이스를 가져오면 해당 인터페이스를 사용하여 현재 선택된 프로젝트 항목을 확인할 수 있습니다. 프로젝트 항목 ID가 있으면 SetItemAttribute를 사용하여 속성을 추가할 수 있습니다.
다음 절차에서는 VsPkg.cs 속성을 Author
프로젝트 파일의 Tom
값으로 유지합니다.
DTE 개체를 사용하여 프로젝트 계층 구조를 가져오려면
VSPackage에 다음 코드를 추가합니다.
EnvDTE.DTE dte = (EnvDTE.DTE)Package.GetGlobalService(typeof(EnvDTE.DTE)); EnvDTE.Project project = dte.Solution.Projects.Item(1); string uniqueName = project.UniqueName; IVsSolution solution = (IVsSolution)Package.GetGlobalService(typeof(SVsSolution)); IVsHierarchy hierarchy; solution.GetProjectOfUniqueName(uniqueName, out hierarchy);
DTE 개체를 사용하여 프로젝트 항목 속성을 유지하려면
이전 프로시저의 메서드에 지정된 코드에 다음 코드를 추가합니다.
IVsBuildPropertyStorage buildPropertyStorage = hierarchy as IVsBuildPropertyStorage; if (buildPropertyStorage != null) { uint itemId; string fullPath = (string)project.ProjectItems.Item( "VsPkg.cs").Properties.Item("FullPath").Value; hierarchy.ParseCanonicalName(fullPath, out itemId); buildPropertyStorage.SetItemAttribute(itemId, "Author", "Tom"); }
IVsMonitorSelection을 사용하여 프로젝트 계층 구조를 가져오려면
VSPackage에 다음 코드를 추가합니다.
IVsHierarchy hierarchy = null; IntPtr hierarchyPtr = IntPtr.Zero; IntPtr selectionContainer = IntPtr.Zero; uint itemid; // Retrieve shell interface in order to get current selection IVsMonitorSelection monitorSelection = Package.GetGlobalService(typeof(SVsShellMonitorSelection)) as IVsMonitorSelection; if (monitorSelection == null) throw new InvalidOperationException(); try { // Get the current project hierarchy, project item, and selection container for the current selection // If the selection spans multiple hierarchies, hierarchyPtr is Zero IVsMultiItemSelect multiItemSelect = null; ErrorHandler.ThrowOnFailure( monitorSelection.GetCurrentSelection( out hierarchyPtr, out itemid, out multiItemSelect, out selectionContainer)); // We only care if there is only one node selected in the tree if (!(itemid == VSConstants.VSITEMID_NIL || hierarchyPtr == IntPtr.Zero || multiItemSelect != null || itemid == VSConstants.VSITEMID_SELECTION)) { hierarchy = Marshal.GetObjectForIUnknown(hierarchyPtr) as IVsHierarchy; } } finally { if (hierarchyPtr != IntPtr.Zero) Marshal.Release(hierarchyPtr); if (selectionContainer != IntPtr.Zero) Marshal.Release(selectionContainer); }
프로젝트 계층 구조가 지정된 경우 선택한 프로젝트 항목 속성을 유지하려면
이전 프로시저의 메서드에 지정된 코드에 다음 코드를 추가합니다.
IVsBuildPropertyStorage buildPropertyStorage = hierarchy as IVsBuildPropertyStorage; if (buildPropertyStorage != null) { buildPropertyStorage.SetItemAttribute(itemId, "Author", "Tom"); }
속성이 유지되는지 확인하려면
Visual Studio를 시작한 다음, 솔루션을 열거나 만듭니다.
솔루션 탐색기의 프로젝트 항목 VsPkg.cs를 선택합니다.
중단점을 사용하거나 VSPackage가 로드되고 SetItemAttribute가 실행되는지 확인합니다.
참고 항목
UI 컨텍스트 SolutionExists_guid에서 VSPackage를 자동으로 로드할 수 있습니다. 자세한 내용은 VSPackages 로드를 참조하세요.
Visual Studio를 닫은 다음, 메모장에서 프로젝트 파일을 엽니다. 다음과 같이 Tom 값이 포함된 <Author> 태그가 표시됩니다.
<Compile Include="VsPkg.cs"> <Author>Tom</Author> </Compile>