Sdílet prostřednictvím


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

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

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

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

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

  1. Spusťte Visual Studio a pak otevřete nebo vytvořte řešení.

  2. V Průzkumník řešení vyberte položku projektu VsPkg.cs.

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

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