Beibehalten der Eigenschaft eines Projektelements

Möglicherweise möchten Sie eine Eigenschaft beibehalten, die Sie einem Projektelement hinzufügen, z. B. den Autor einer Quelldatei. Dazu können Sie die Eigenschaft in der Projektdatei speichern.

Der erste Schritt zum Speichern einer Eigenschaft in einer Projektdatei besteht darin, die Hierarchie des Projekts als IVsHierarchy Schnittstelle abzurufen. Sie können diese Schnittstelle entweder mithilfe der Automatisierung oder mithilfe von IVsMonitorSelection. Nachdem Sie die Schnittstelle erhalten haben, können Sie sie verwenden, um zu bestimmen, welches Projektelement derzeit ausgewählt ist. Nachdem Sie über die Projektelement-ID verfügen SetItemAttribute , können Sie die Eigenschaft hinzufügen.

In den folgenden Verfahren speichern Sie die VsPkg.cs-Eigenschaft Author mit dem Wert Tom in der Projektdatei.

So rufen Sie die Projekthierarchie mit dem DTE-Objekt ab

  1. Fügen Sie Ihrem VSPackage den folgenden Code hinzu:

    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);
    

So speichern Sie die Projektelementeigenschaft mit dem DTE-Objekt

  1. Fügen Sie dem code, der in der Methode im vorherigen Verfahren angegeben ist, den folgenden Code hinzu:

    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");
    }
    

So rufen Sie die Projekthierarchie mit IVsMonitorSelection ab

  1. Fügen Sie Ihrem VSPackage den folgenden Code hinzu:

    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);
    }
    

So speichern Sie die ausgewählte Projektelementeigenschaft unter Berücksichtigung der Projekthierarchie

  1. Fügen Sie dem code, der in der Methode im vorherigen Verfahren angegeben ist, den folgenden Code hinzu:

    IVsBuildPropertyStorage buildPropertyStorage =
        hierarchy as IVsBuildPropertyStorage;
    if (buildPropertyStorage != null)
    {
        buildPropertyStorage.SetItemAttribute(itemId, "Author", "Tom");
    }
    

So überprüfen Sie, ob die Eigenschaft beibehalten wird

  1. Starten Sie Visual Studio, und öffnen Oder erstellen Sie eine Projektmappe.

  2. Wählen Sie das Projektelement VsPkg.cs in Projektmappen-Explorer aus.

  3. Verwenden Sie einen Haltepunkt oder bestimmen Sie andernfalls, dass Ihr VSPackage geladen wird und dass SetItemAttribute ausgeführt wird.

    Hinweis

    Sie können ein VSPackage im UI-Kontext SolutionExists_guidautomatisch laden. Weitere Informationen finden Sie unter Laden von VSPackages.

  4. Schließen Sie Visual Studio, und öffnen Sie dann die Projektdatei in Editor. Das Author-Tag> mit dem Wert "Tom" sollte wie folgt angezeigt <werden:

    <Compile Include="VsPkg.cs">
        <Author>Tom</Author>
    </Compile>