Freigeben über


Beibehalten von Daten in der MSBuild-Projektdatei

Ein Projektuntertyp muss möglicherweise untertypspezifische Daten zur späteren Verwendung in der Projektdatei beibehalten. Ein Projektuntertyp verwendet die Persistenz der Projektdatei, um die folgenden Anforderungen zu erfüllen:

  1. Speichern Von Daten, die als Teil des Projekts verwendet werden. (Weitere Informationen zum Microsoft-Build-Engine finden Sie unter MSBuild.) Buildbezogene Informationen können entweder:

    1. Konfigurationsunabhängige Daten. Das heißt, In MSBuild-Elementen gespeicherte Daten mit leeren oder fehlenden Bedingungen.

    2. Konfigurationsabhängige Daten. Das heißt, Daten, die in MSBuild-Elementen gespeichert sind, die für eine bestimmte Projektkonfiguration bedingt sind. Beispiel:

      <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
      
  2. Speichern Sie Daten, die für den Build nicht relevant sind. Diese Daten können in Freiform-XML ausgedrückt werden, die nicht anhand eines XML-Schemas überprüft wird.

    1. Konfigurationsunabhängige Daten.

    2. Konfigurationsabhängige Daten.

Die Persistenz von Daten, die für das Erstellen eines Projekts nützlich sind, wird über MSBuild behandelt. Das MSBuild-System Standard enthält eine Mastertabelle mit buildbezogenen Informationen. Projektuntertypen sind für den Zugriff auf diese Daten verantwortlich, um Eigenschaftswerte abzurufen und festzulegen. Project-Untertypen können auch die buildbezogene Datentabelle erweitern, indem zusätzliche Eigenschaften hinzugefügt werden, die beibehalten werden sollen, und indem Eigenschaften entfernt werden, sodass sie nicht beibehalten werden.

Zum Ändern der MSBuild-Daten ist ein Projektuntertyp für das Abrufen des MSBuild-Eigenschaftsobjekts aus dem Basisprojektsystem über IVsBuildPropertyStorage. IVsBuildPropertyStorage ist eine Schnittstelle, die im Kernprojektsystem implementiert ist, und die aggregierenden Projektuntertypabfragen für das Projekt, indem sie ausgeführt wird QueryInterface.

Das folgende Verfahren beschreibt die Schritte zum Entfernen einer Eigenschaft mithilfe IVsBuildPropertyStoragevon .

So entfernen Sie eine Eigenschaft aus einer MSBuild-Projektdatei

  1. IVsBuildPropertyStorage Aufrufen QueryInterface des Projektuntertyps.

  2. pszPropName Rufen Sie RemoveProperty die Eigenschaft auf, die Sie entfernen möchten.

Die Persistenz von Daten in Projektdateien, die keine Rolle spielt, wird über IPersistXMLFragmentdie Verarbeitung verarbeitet.

Sie können das Standard-Objektproject subtype aggregator, das project subtype project configuration Objekt oder beides implementierenIPersistXMLFragment.

In den folgenden Punkten werden die Standard Konzepte zur Persistenz von nicht buildbezogenen Informationen beschrieben.

  • Das Basisprojekt ruft den Standard Projektuntertyp (d. h. den äußersten Projektuntertyp) auf, um konfigurationsunabhängige Daten zu laden und zu speichern, und ruft die Projektuntertyp-Projektkonfigurationsobjekte auf, um konfigurationsabhängige Daten zu laden oder zu speichern.

  • Das Basisprojekt ruft die Methoden IPersistXMLFragment für jede Ebene der Projektuntertypaggregation mehrmals auf und übergibt die GUID für jede Ebene.

  • Das Basisprojekt übergibt oder empfängt ein XML-Fragment, das einem bestimmten Projektuntertyp zugeordnet ist, und verwendet diesen Mechanismus als Möglichkeit, den Zustand zwischen den Aggregationsebenen beizubehalten.

  • Das Basisprojekt ruft die Implementierung des äußersten Projektuntertyps IPersistXMLFragmentauf, der eine GUID übergibt. Wenn die GUID zum äußersten Projektuntertyp gehört, verarbeitet sie den Aufruf selbst; andernfalls delegiert er den Aufruf an einen inneren Projektuntertyp usw., bis der Projektuntertyp gefunden wird, dem die GUID entspricht.

  • Ein Projektuntertyp kann das XML-Fragment auch vor oder nach dem Delegieren des Aufrufs an einen inneren Projektuntertyp ändern. Das folgende Beispiel zeigt einen Auszug aus einer Projektdatei, bei dem ein Name einer Datei, die für einen Projektuntertyp spezifische Eigenschaften enthält, an diesen Projektuntertyp übergeben wird.

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