Compartir a través de


Conservar la propiedad de un elemento de proyecto

Es posible que desee conservar una propiedad que agregue a un elemento de proyecto, como el autor de un archivo de origen. Puede hacerlo almacenando la propiedad en el archivo del proyecto.

El primer paso para conservar una propiedad en un archivo de proyecto es obtener la jerarquía del proyecto como una IVsHierarchy interfaz. Puede obtener esta interfaz mediante Automation o mediante IVsMonitorSelection. Una vez que obtenga la interfaz, puede usarla para determinar qué elemento de proyecto está seleccionado actualmente. Una vez que tenga el identificador del elemento de proyecto, puede usar SetItemAttribute para agregar la propiedad .

En los procedimientos siguientes, se conserva la propiedad Author VsPkg.cs con el valor Tom en el archivo del proyecto.

Para obtener la jerarquía del proyecto con el objeto DTE

  1. Agregue el código siguiente a 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);
    

Para conservar la propiedad del elemento de proyecto con el objeto DTE

  1. Agregue el código siguiente al código especificado en el método del procedimiento anterior:

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

Para obtener la jerarquía del proyecto mediante IVsMonitorSelection

  1. Agregue el código siguiente a 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);
    }
    

Para conservar la propiedad del elemento de proyecto seleccionada, dada la jerarquía del proyecto

  1. Agregue el código siguiente al código especificado en el método del procedimiento anterior:

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

Para comprobar que la propiedad se conserva

  1. Inicie Visual Studio y abra o cree una solución.

  2. Seleccione el elemento de proyecto VsPkg.cs en Explorador de soluciones.

  3. Use un punto de interrupción o determine de otro modo que el VSPackage se carga y que se ejecuta SetItemAttribute.

    Nota:

    Puede cargar automáticamente un VSPackage en el contexto SolutionExists_guidde la interfaz de usuario . Para obtener más información, consulte Carga de VSPackages.

  4. Cierre Visual Studio y, a continuación, abra el archivo del proyecto en Bloc de notas. Debería ver la <etiqueta Author> con el valor Tom, como se indica a continuación:

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