Rendere persistente la proprietà di un elemento del progetto
È possibile rendere persistente una proprietà aggiunta a un elemento del progetto, ad esempio l'autore di un file di origine. A tale scopo, archiviare la proprietà nel file di progetto.
Il primo passaggio per rendere persistente una proprietà in un file di progetto consiste nell'ottenere la gerarchia del progetto come IVsHierarchy interfaccia. È possibile ottenere questa interfaccia usando Automazione o .IVsMonitorSelection Dopo aver ottenuto l'interfaccia, è possibile usarla per determinare quale elemento di progetto è attualmente selezionato. Dopo aver ottenuto l'ID elemento del progetto, è possibile usare SetItemAttribute per aggiungere la proprietà .
Nelle procedure seguenti si mantiene la proprietà Author
VsPkg.cs con il valore Tom
nel file di progetto.
Per ottenere la gerarchia del progetto con l'oggetto DTE
Aggiungere il codice seguente al pacchetto 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);
Per rendere persistente la proprietà dell'elemento del progetto con l'oggetto DTE
Aggiungere il codice seguente al codice specificato nel metodo nella procedura precedente:
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"); }
Per ottenere la gerarchia del progetto tramite IVsMonitorSelection
Aggiungere il codice seguente al pacchetto 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); }
Per rendere persistente la proprietà dell'elemento di progetto selezionato, data la gerarchia del progetto
Aggiungere il codice seguente al codice specificato nel metodo nella procedura precedente:
IVsBuildPropertyStorage buildPropertyStorage = hierarchy as IVsBuildPropertyStorage; if (buildPropertyStorage != null) { buildPropertyStorage.SetItemAttribute(itemId, "Author", "Tom"); }
Per verificare che la proprietà sia persistente
Avviare Visual Studio e quindi aprire o creare una soluzione.
Selezionare l'elemento di progetto VsPkg.cs in Esplora soluzioni.
Usare un punto di interruzione o determinare in caso contrario che il pacchetto VSPackage venga caricato e che SetItemAttribute venga eseguito.
Nota
È possibile caricare automaticamente un VSPackage nel contesto SolutionExists_guiddell'interfaccia utente. Per altre informazioni, vedere Caricare pacchetti VSPackage.
Chiudere Visual Studio e quindi aprire il file di progetto in Blocco note. Verrà visualizzato il <tag Author> con il valore Tom, come indicato di seguito:
<Compile Include="VsPkg.cs"> <Author>Tom</Author> </Compile>