Partager via


Conserver la propriété d’un élément de projet

Vous pouvez conserver une propriété que vous ajoutez à un élément de projet, par exemple l’auteur d’un fichier source. Pour ce faire, stockez la propriété dans le fichier projet.

La première étape pour conserver une propriété dans un fichier projet consiste à obtenir la hiérarchie du projet en tant qu’interface IVsHierarchy . Vous pouvez obtenir cette interface à l’aide d’Automation ou à l’aide de IVsMonitorSelection. Une fois que vous avez obtenu l’interface, vous pouvez l’utiliser pour déterminer l’élément de projet actuellement sélectionné. Une fois que vous disposez de l’ID d’élément de projet, vous pouvez l’utiliser SetItemAttribute pour ajouter la propriété.

Dans les procédures suivantes, vous conservez la propriété Author VsPkg.cs avec la valeur Tom dans le fichier projet.

Pour obtenir la hiérarchie de projet avec l’objet DTE

  1. Ajoutez le code suivant à votre 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);
    

Pour conserver la propriété d’élément de projet avec l’objet DTE

  1. Ajoutez le code suivant au code donné dans la méthode dans la procédure précédente :

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

Pour obtenir la hiérarchie de projet à l’aide d’IVsMonitorSelection

  1. Ajoutez le code suivant à votre 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);
    }
    

Pour conserver la propriété d’élément de projet sélectionnée, en fonction de la hiérarchie du projet

  1. Ajoutez le code suivant au code donné dans la méthode dans la procédure précédente :

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

Pour vérifier que la propriété est conservée

  1. Démarrez Visual Studio, puis ouvrez ou créez une solution.

  2. Sélectionnez l’élément de projet VsPkg.cs dans Explorateur de solutions.

  3. Utilisez un point d’arrêt ou déterminez si votre VSPackage est chargé et que SetItemAttribute s’exécute.

    Remarque

    Vous pouvez charger automatiquement un VSPackage dans le contexte SolutionExists_guidde l’interface utilisateur. Pour plus d’informations, consultez Charger des VSPackages.

  4. Fermez Visual Studio, puis ouvrez le fichier projet dans Bloc-notes Windows. Vous devez voir la <balise Author> avec la valeur Tom, comme suit :

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