Données persistantes dans le fichier projet MSBuildPersisting Data in the MSBuild Project File

Un sous-type de projet devrez conserver les données spécifiques au sous-type dans le fichier projet pour une utilisation ultérieure.A project subtype may need to persist subtype-specific data into the project file for later use. Un sous-type de projet utilise la persistance d’un fichier projet pour répondre aux exigences suivantes :A project subtype uses project file persistence to meet the following requirements:

  1. Conserver les données utilisées dans le cadre de la génération du projet.Persist data used as part of building the project. (Pour plus d’informations sur Microsoft Build Engine, consultez MSBuild.) Informations relatives à la build peuvent :(For more information on the Microsoft Build Engine, see MSBuild.) Build-related information can either:

    1. Données liées à la configuration.Configuration-independent data. Autrement dit, les données stockées dans des éléments MSBuild avec des conditions vides ou manquantes.That is, data stored in MSBuild elements with blank or missing conditions.

    2. Données dépend de la configuration.Configuration-dependent data. Autrement dit, les données stockées dans des éléments MSBuild qui dépendent d’une configuration de projet particulier.That is, data stored in MSBuild elements that are conditioned for a particular project configuration. Par exemple :For example:

      <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">  
      
  2. Conserver les données qui sont applique pas à générer.Persist data that is not relevant to build. Ces données peuvent être exprimées en XML de forme libre qui n’est pas validée par rapport à un schéma XML.This data can be expressed in free-form XML that is not validated against an XML schema.

    1. Données liées à la configuration.Configuration-independent data.

    2. Données dépend de la configuration.Configuration-dependent data.

Persistance des données utiles pour la création d’un projet est gérée via MSBuild.Persistence of data useful for building a project is handled through MSBuild. Le système MSBuild tient à jour une table principale des informations relatives à la génération.The MSBuild system maintains a master table of build-related information. Les sous-types de projet sont chargés pour accéder à ces données pour obtenir et définir des valeurs de propriété.Project subtypes are responsible for accessing this data to get and set property values. Sous-types de projet peuvent augmenter également de la table de données relatives à la build en ajoutant des propriétés supplémentaires à rendre persistantes et en supprimant des propriétés afin qu’ils ne sont pas conservées.Project subtypes can also augment the build-related data table by adding additional properties to be persisted and by removing properties so they are not persisted.

Pour modifier les données de MSBuild, un sous-type de projet est chargé de récupérer l’objet de propriété MSBuild à partir du système de projet de base via IVsBuildPropertyStorage.To modify the MSBuild data, a project subtype is responsible for retrieving the MSBuild property object from the base project system through IVsBuildPropertyStorage. IVsBuildPropertyStorage est une interface implémentée sur le système de projet principal et les requêtes de sous-type de projet agrégation pour qu’il en exécutant QueryInterface.IVsBuildPropertyStorage is an interface implemented on the core project system and the aggregating project subtype queries for it by running QueryInterface.

La procédure suivante présente les étapes de suppression d’une propriété à l’aide de IVsBuildPropertyStorage.The following procedure outlines the steps for removing a property using IVsBuildPropertyStorage.

Pour supprimer une propriété d’un fichier projet MSBuildTo remove a property from an MSBuild project file

  1. Appelez QueryInterface sur IVsBuildPropertyStorage du sous-type de projet.Call QueryInterface on IVsBuildPropertyStorage of the project subtype.

  2. Appelez RemoveProperty avec pszPropName défini sur la propriété que vous souhaitez supprimer.Call RemoveProperty with pszPropName set to the property you want to remove.

Persistance des données dans les fichiers projet qui n’a pas d’importance à générer est gérée via IPersistXMLFragment.Persistence of data in project files that does not matter to build is handled through IPersistXMLFragment.

Vous pouvez implémenter IPersistXMLFragment sur le principal project subtype aggregator objet, le project subtype project configuration objet, ou les deux.You can implement IPersistXMLFragment on the main project subtype aggregator object, the project subtype project configuration object, or both.

Les points suivants décrivent les principaux concepts concernant la persistance de non-génération des informations connexes.The following points outline the main concepts regarding the persistence of non-build related information.

  • Le projet de base appelle sur l’objet d’aggregator sous-type (autrement dit, le sous-type de projet extérieur) projet principal pour charger et enregistrer des données de configuration distinctes, et il appelle les objets de configuration de projet sous-type projet à charger ou enregistrer dépendantes de la configuration données.The base project calls on the main project subtype (that is, the outermost project subtype) aggregator object to load and save configuration independent data, and it calls on the project subtype project configuration objects to load or save configuration dependent data.

  • Le projet de base appelle les méthodes de IPersistXMLFragment plusieurs fois pour chaque niveau d’agrégation de sous-type de projet et passe le GUID pour chaque niveau.The base project calls the methods of IPersistXMLFragment multiple times for each level of project subtype aggregation, and passes the GUID for each level.

  • Le projet de base réussit ou reçoit un fragment XML qui est dédié à un sous-type de projet particulier et utilise ce mécanisme comme un moyen de rendre persistant l’état entre les niveaux d’agrégation.The base project passes or receives an XML fragment that is dedicated to a particular project subtype and uses this mechanism as a way of persisting state between the aggregation levels.

  • Le projet de base appelle le sous-type de projet extérieur IPersistXMLFragmentimplémentation en passant un GUID.The base project calls the outermost project subtype's IPersistXMLFragmentimplementation passing in a GUID. Si le GUID appartient au sous-type de projet extérieur, il gère l’appel lui-même ; dans le cas contraire, elle délègue l’appel à un sous-type de projet interne et ainsi de suite jusqu'à trouve le sous-type de projet le GUID correspond à.If the GUID belongs to the outermost project subtype, it handles the call itself; otherwise it delegates the call to an inner project subtype, and so on, until the project subtype that the GUID corresponds to is found.

  • Un sous-type de projet permettre également modifier le fragment XML avant ou après que elle délègue l’appel à un sous-type de projet interne.A project subtype can also modify the XML fragment before or after it delegates the call to an inner project subtype. L’exemple suivant montre un extrait à partir d’un fichier de projet, où un nom d’un fichier qui contient les propriétés spécifiques à un sous-type de projet, est passé à ce sous-type de projet.The following example shows an excerpt from a project file, where a name of a file that contains properties specific to a project subtype, is passed to that project subtype.

    <ProjectExtensions>  
        <VisualStudio>  
          <FlavorProperties GUID="{<FlavorGUID>}">  
            <FlavorProject TestFileFolder="TestFile" />  
          </FlavorProperties>  
        </VisualStudio>  
      </ProjectExtensions>  
    

Voir aussiSee Also

Sous-types de projetsProject Subtypes