Udostępnij za pośrednictwem


Utrwalanie danych w pliku projektu programu MSBuild

Podtyp projektu może wymagać utrwalania danych specyficznych dla podtypu do pliku projektu do późniejszego użycia. Podtyp projektu używa trwałości pliku projektu, aby spełnić następujące wymagania:

  1. Utrwalanie danych używanych w ramach kompilowania projektu. (Aby uzyskać więcej informacji na temat aparatu Microsoft Build Engine, zobacz MSBuild.) Informacje związane z kompilacją mogą:

    1. Dane niezależne od konfiguracji. Oznacza to, że dane przechowywane w elementach MSBuild z pustymi lub brakującymi warunkami.

    2. Dane zależne od konfiguracji. Oznacza to, że dane przechowywane w elementach programu MSBuild, które są warunkowe dla określonej konfiguracji projektu. Na przykład:

      <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
      
  2. Utrwalanie danych, które nie są istotne dla kompilacji. Te dane można wyrazić w formacie XML w postaci wolnej, która nie jest weryfikowana względem schematu XML.

    1. Dane niezależne od konfiguracji.

    2. Dane zależne od konfiguracji.

Trwałość danych przydatnych do kompilowania projektu jest obsługiwana za pośrednictwem programu MSBuild. System MSBuild przechowuje główną tabelę informacji związanych z kompilacją. Podtypy projektu są odpowiedzialne za uzyskiwanie dostępu do tych danych i ustawianie wartości właściwości. Podtypy projektu mogą również rozszerzyć tabelę danych związanych z kompilacją, dodając dodatkowe właściwości do utrwalania i usuwając właściwości, aby nie były utrwalane.

Aby zmodyfikować dane programu MSBuild, podtyp projektu jest odpowiedzialny za pobieranie obiektu właściwości MSBuild z podstawowego systemu projektu za pośrednictwem IVsBuildPropertyStorageprogramu . IVsBuildPropertyStorage jest interfejsem zaimplementowanym w podstawowym systemie projektu i agregującym zapytania podtypu projektu przez uruchomienie polecenia QueryInterface.

Poniższa procedura zawiera opis kroków usuwania właściwości przy użyciu metody IVsBuildPropertyStorage.

Aby usunąć właściwość z pliku projektu MSBuild

  1. IVsBuildPropertyStorage Wywołanie QueryInterface podtypu projektu.

  2. Wywołaj metodę RemoveProperty z ustawioną pszPropName właściwością, którą chcesz usunąć.

Trwałość danych w plikach projektu, które nie mają znaczenia, że kompilacja jest obsługiwana za pośrednictwem programu IPersistXMLFragment.

Można zaimplementować IPersistXMLFragment w obiekcie głównym project subtype aggregator , obiekcie lub obu tych obiektach project subtype project configuration .

W poniższych punktach przedstawiono główne pojęcia dotyczące trwałości informacji niezwiązanych z kompilacją.

  • Podstawowy projekt wywołuje główny podtyp projektu (czyli najbardziej zewnętrznego podtypu projektu) obiekt agregatora w celu załadowania i zapisania danych niezależnych od konfiguracji oraz wywołuje obiekty konfiguracji podtypu projektu w celu załadowania lub zapisania danych zależnych od konfiguracji.

  • Projekt podstawowy wywołuje metody wielokrotności IPersistXMLFragment dla każdego poziomu agregacji podtypu projektu i przekazuje identyfikator GUID dla każdego poziomu.

  • Projekt podstawowy przekazuje lub odbiera fragment XML przeznaczony dla określonego podtypu projektu i używa tego mechanizmu jako sposobu utrwalania stanu między poziomami agregacji.

  • Projekt podstawowy wywołuje implementację podtypu IPersistXMLFragmentprojektu najbardziej zewnętrznego przekazującą identyfikator GUID. Jeśli identyfikator GUID należy do najbardziej zewnętrznego podtypu projektu, obsługuje samo wywołanie; w przeciwnym razie deleguje wywołanie do podtypu projektu wewnętrznego i tak dalej, dopóki podtyp projektu nie zostanie znaleziony identyfikator GUID.

  • Podtyp projektu może również zmodyfikować fragment XML przed lub po delegowaniu wywołania do podtypu projektu wewnętrznego. Poniższy przykład przedstawia fragment pliku projektu, w którym nazwa pliku zawierającego właściwości specyficzne dla podtypu projektu jest przekazywana do tego podtypu projektu.

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