Udostępnij za pośrednictwem


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

  1. 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

  1. 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

  1. 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

  1. 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

  1. Uruchom program Visual Studio, a następnie otwórz lub utwórz rozwiązanie.

  2. Wybierz element projektu VsPkg.cs w Eksplorator rozwiązań.

  3. 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).

  4. 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>