Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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>