Zachování vlastnosti položky projektu
Můžete chtít zachovat vlastnost, kterou přidáte do položky projektu, například autora zdrojového souboru. Můžete to provést uložením vlastnosti do souboru projektu.
Prvním krokem k zachování vlastnosti v souboru projektu je získání hierarchie projektu jako IVsHierarchy rozhraní. Toto rozhraní můžete získat buď pomocí automatizace, nebo pomocí .IVsMonitorSelection Jakmile rozhraní získáte, můžete ho použít k určení aktuálně vybrané položky projektu. Jakmile máte ID položky projektu, můžete tuto vlastnost přidat.SetItemAttribute
V následujících postupech zachováte vlastnost Author
VsPkg.cs s hodnotou Tom
v souboru projektu.
Získání hierarchie projektu s objektem DTE
Do balíčku VSPackage přidejte následující kód:
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);
Zachování vlastnosti položky projektu s objektem DTE
Do kódu zadaného v metodě v předchozím postupu přidejte následující kód:
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"); }
Získání hierarchie projektu pomocí IVsMonitorSelection
Do balíčku VSPackage přidejte následující kód:
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); }
Chcete-li zachovat vybranou vlastnost položky projektu vzhledem k hierarchii projektu
Do kódu zadaného v metodě v předchozím postupu přidejte následující kód:
IVsBuildPropertyStorage buildPropertyStorage = hierarchy as IVsBuildPropertyStorage; if (buildPropertyStorage != null) { buildPropertyStorage.SetItemAttribute(itemId, "Author", "Tom"); }
Ověření zachování vlastnosti
Spusťte Visual Studio a pak otevřete nebo vytvořte řešení.
V Průzkumník řešení vyberte položku projektu VsPkg.cs.
Použijte zarážku nebo jinak určete, že je sada VSPackage načtená a že je spuštěná sada SetItemAttribute.
Poznámka:
Balíček VSPackage můžete automaticky načíst v kontextu SolutionExists_guiduživatelského rozhraní . Další informace naleznete v tématu Načtení balíčků VSPackages.
Zavřete Visual Studio a otevřete soubor projektu v Poznámkový blok. Měla by se zobrazit <značka Autor> s hodnotou Tom, jak je znázorněno níže:
<Compile Include="VsPkg.cs"> <Author>Tom</Author> </Compile>