Données persistantes dans le fichier projet MSBuild

Un sous-type de projet peut avoir besoin de conserver des données spécifiques au sous-type dans le fichier projet pour une utilisation ultérieure. Un sous-type de projet utilise la persistance des fichiers projet pour répondre aux exigences suivantes :

  1. Conserver les données utilisées dans le cadre de la création du projet. (Pour plus d’informations sur le moteur de build Microsoft, consultez MSBuild.) Les informations relatives à la génération peuvent :

    1. Données indépendantes de la configuration. Autrement dit, les données stockées dans les éléments MSBuild avec des conditions vides ou manquantes.

    2. Données dépendantes de la configuration. Autrement dit, les données stockées dans des éléments MSBuild qui sont conditionnées pour une configuration de projet particulière. Par exemple :

      <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
      
  2. Conserver les données qui ne sont pas pertinentes pour la génération. Ces données peuvent être exprimées en XML de forme libre qui n’est pas validée par rapport à un schéma XML.

    1. Données indépendantes de la configuration.

    2. Données dépendantes de la configuration.

La persistance des données utiles pour la création d’un projet est gérée via MSBuild. Le système MSBuild gère une table maître d’informations liées à la génération. Les sous-types de projet sont responsables de l’accès à ces données pour obtenir et définir des valeurs de propriété. Les sous-types de projet peuvent également augmenter la table de données liée à la génération en ajoutant des propriétés supplémentaires à conserver et en supprimant les propriétés afin qu’elles ne soient pas conservées.

Pour modifier les données 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. IVsBuildPropertyStorage est une interface implémentée sur le système de projet principal et l’agrégation des requêtes de sous-type de projet pour celle-ci en exécutant QueryInterface.

La procédure suivante décrit les étapes de suppression d’une propriété à l’aide IVsBuildPropertyStoragede .

Pour supprimer une propriété d’un fichier projet MSBuild

  1. IVsBuildPropertyStorage Appel du QueryInterface sous-type de projet.

  2. Appelez RemoveProperty avec pszPropName la propriété que vous souhaitez supprimer.

La persistance des données dans les fichiers projet qui n’ont pas d’importance à générer est gérée via IPersistXMLFragment.

Vous pouvez implémenter IPersistXMLFragment sur l’objet principal project subtype aggregator , l’objet project subtype project configuration ou les deux.

Les points suivants décrivent les principaux concepts relatifs à la persistance des informations non liées à la build.

  • Le projet de base appelle le sous-type de projet principal (autrement dit, le sous-type de projet le plus externe) pour charger et enregistrer des données indépendantes de la configuration, et appelle les objets de configuration du sous-type projet pour charger ou enregistrer des données dépendantes de la configuration.

  • Le projet de base appelle les méthodes de IPersistXMLFragment plusieurs fois pour chaque niveau d’agrégation de sous-type de projet et transmet le GUID pour chaque niveau.

  • Le projet de base passe ou reçoit un fragment XML dédié à un sous-type de projet particulier et utilise ce mécanisme comme moyen de conserver l’état entre les niveaux d’agrégation.

  • Le projet de base appelle l’implémentation du sous-type de IPersistXMLFragmentprojet le plus externe en passant un GUID. Si le GUID appartient au sous-type de projet le plus externe, il gère l’appel lui-même ; sinon, il délègue l’appel à un sous-type de projet interne, et ainsi de suite, jusqu’à ce que le sous-type de projet correspondant au GUID soit trouvé.

  • Un sous-type de projet peut également modifier le fragment XML avant ou après qu’il délègue l’appel à un sous-type de projet interne. L’exemple suivant montre un extrait d’un fichier projet, où un nom d’un fichier qui contient des propriétés propres à un sous-type de projet, est passé à ce sous-type de projet.

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