Utrwalanie właściwości elementu projektu
Możesz zachować właściwość dodaną do elementu projektu, taką jak autor pliku źródłowego. Można to zrobić, przechowując właściwość w pliku projektu.
Pierwszym krokiem do utrwalania właściwości w pliku projektu jest uzyskanie hierarchii projektu jako interfejsu IVsHierarchy . Ten interfejs można uzyskać przy użyciu usługi Automation lub za pomocą polecenia IVsMonitorSelection. Po uzyskaniu interfejsu można go użyć do określenia, który element projektu jest aktualnie wybrany. Po utworzeniu identyfikatora elementu projektu możesz użyć SetItemAttribute polecenia , aby dodać właściwość .
W poniższych procedurach utrwalisz właściwość Author
VsPkg.cs z wartością Tom
w pliku projektu.
Aby uzyskać hierarchię projektu z obiektem DTE
Dodaj następujący kod do pakietu 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);
Aby utrwały właściwość elementu projektu za pomocą obiektu DTE
Dodaj następujący kod do kodu podanego w metodzie w poprzedniej procedurze:
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"); }
Aby uzyskać hierarchię projektu przy użyciu funkcji IVsMonitorSelection
Dodaj następujący kod do pakietu 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); }
Aby utrwały wybraną właściwość elementu projektu, biorąc pod uwagę hierarchię projektu
Dodaj następujący kod do kodu podanego w metodzie w poprzedniej procedurze:
IVsBuildPropertyStorage buildPropertyStorage = hierarchy as IVsBuildPropertyStorage; if (buildPropertyStorage != null) { buildPropertyStorage.SetItemAttribute(itemId, "Author", "Tom"); }
Aby sprawdzić, czy właściwość jest utrwalone
Uruchom program Visual Studio, a następnie otwórz lub utwórz rozwiązanie.
Wybierz element projektu VsPkg.cs w Eksplorator rozwiązań.
Użyj punktu przerwania lub w inny sposób określ, czy pakiet VSPackage jest ładowany i że element SetItemAttribute jest uruchamiany.
Uwaga
Pakiet VSPackage można ładować automatycznie w kontekście SolutionExists_guidinterfejsu użytkownika. Aby uzyskać więcej informacji, zobacz Load VSPackages (Ładowanie pakietów VSPackage).
Zamknij program Visual Studio, a następnie otwórz plik projektu w Notatnik. Powinien zostać wyświetlony <tag Author> z wartością Tom w następujący sposób:
<Compile Include="VsPkg.cs"> <Author>Tom</Author> </Compile>