Condividi tramite


Salvataggio permanente dei dati nel file di progetto MSBuild

Un sottotipo di progetto potrebbe dover rendere persistenti i dati specifici del sottotipo nel file di progetto per un uso successivo. Un sottotipo di progetto usa la persistenza dei file di progetto per soddisfare i requisiti seguenti:

  1. Rendere persistenti i dati usati come parte della compilazione del progetto. Per altre informazioni sul motore di compilazione Microsoft, vedere MSBuild. Le informazioni correlate alla compilazione possono:

    1. Dati indipendenti dalla configurazione. Ovvero, i dati archiviati negli elementi MSBuild con condizioni vuote o mancanti.

    2. Dati dipendenti dalla configurazione. Ovvero, i dati archiviati in elementi MSBuild con condizioni per una configurazione di progetto specifica. Ad esempio:

      <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
      
  2. Rendere persistenti i dati non pertinenti per la compilazione. Questi dati possono essere espressi in formato libero XML non convalidato rispetto a un XML Schema.

    1. Dati indipendenti dalla configurazione.

    2. Dati dipendenti dalla configurazione.

La persistenza dei dati utili per la compilazione di un progetto viene gestita tramite MSBuild. Il sistema MSBuild gestisce una tabella master di informazioni correlate alla compilazione. I sottotipi di progetto sono responsabili dell'accesso a questi dati per ottenere e impostare i valori delle proprietà. I sottotipi di progetto possono anche aumentare la tabella dei dati correlata alla compilazione aggiungendo proprietà aggiuntive da rendere persistenti e rimuovendo le proprietà in modo che non siano persistenti.

Per modificare i dati di MSBuild, un sottotipo di progetto è responsabile del recupero dell'oggetto proprietà MSBuild dal sistema di progetto di base tramite IVsBuildPropertyStorage. IVsBuildPropertyStorage è un'interfaccia implementata nel sistema di progetto principale e le query di sottotipo di progetto di aggregazione per esso eseguendo QueryInterface.

Nella procedura seguente vengono descritti i passaggi per la rimozione di una proprietà tramite IVsBuildPropertyStorage.

Per rimuovere una proprietà da un file di progetto MSBuild

  1. Chiamare QueryInterface sul IVsBuildPropertyStorage sottotipo di progetto.

  2. Chiamare RemoveProperty con pszPropName impostato sulla proprietà che si desidera rimuovere.

La persistenza dei dati nei file di progetto che non è importante per la compilazione viene gestita tramite IPersistXMLFragment.

È possibile implementare IPersistXMLFragment nell'oggetto principale project subtype aggregator , nell'oggetto project subtype project configuration o in entrambi.

I punti seguenti descrivono i concetti principali relativi alla persistenza di informazioni non correlate alla compilazione.

  • Il progetto di base chiama il sottotipo di progetto principale (ovvero il sottotipo di progetto più esterno) per caricare e salvare i dati indipendenti dalla configurazione e chiama gli oggetti di configurazione del progetto sottotipo di progetto per caricare o salvare i dati dipendenti dalla configurazione.

  • Il progetto di base chiama i metodi di IPersistXMLFragment più volte per ogni livello di aggregazione del sottotipo di progetto e passa il GUID per ogni livello.

  • Il progetto di base passa o riceve un frammento XML dedicato a un particolare sottotipo di progetto e usa questo meccanismo come modo per rendere persistente lo stato tra i livelli di aggregazione.

  • Il progetto di base chiama l'implementazione del sottotipo di IPersistXMLFragmentprogetto più esterno passando un GUID. Se il GUID appartiene al sottotipo di progetto più esterno, gestisce la chiamata stessa; in caso contrario delega la chiamata a un sottotipo di progetto interno e così via, fino a quando non viene trovato il sottotipo di progetto a cui corrisponde il GUID.

  • Un sottotipo di progetto può anche modificare il frammento XML prima o dopo che delega la chiamata a un sottotipo di progetto interno. Nell'esempio seguente viene illustrato un estratto da un file di progetto, in cui un nome di un file contenente proprietà specifiche di un sottotipo di progetto viene passato a tale sottotipo di progetto.

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