Compartilhar via


Mantendo os dados no arquivo de projeto do MSBuild

Um subtipo de projeto pode precisar persistir dados específicos do subtipo no arquivo de projeto para uso posterior. Um subtipo de projeto usa a persistência do arquivo de projeto para atender aos seguintes requisitos:

  1. Persista os dados usados como parte da criação do projeto. (Para obter mais informações sobre o mecanismo de compilação da Microsoft, consulte MSBuild.) As informações relacionadas à compilação podem:

    1. Dados independentes de configuração. Ou seja, dados armazenados em elementos do MSBuild com condições em branco ou ausentes.

    2. Dados dependentes da configuração. Ou seja, dados armazenados em elementos do MSBuild que são condicionados para uma configuração de projeto específica. Por exemplo:

      <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
      
  2. Persista dados que não são relevantes para compilar. Esses dados podem ser expressos em XML de forma livre que não é validado em relação a um esquema XML.

    1. Dados independentes de configuração.

    2. Dados dependentes da configuração.

A persistência de dados úteis para a criação de um projeto é tratada por meio do MSBuild. O sistema MSBuild mantém uma tabela mestre de informações relacionadas à compilação. Os subtipos de projeto são responsáveis por acessar esses dados para obter e definir valores de propriedade. Os subtipos de projeto também podem aumentar a tabela de dados relacionados à compilação adicionando propriedades adicionais a serem persistentes e removendo propriedades para que não sejam persistentes.

Para modificar os dados do MSBuild, um subtipo de projeto é responsável por recuperar o objeto de propriedade MSBuild do sistema de projeto base por meio IVsBuildPropertyStoragedo . IVsBuildPropertyStorage é uma interface implementada no sistema de projeto principal e as consultas de subtipo de projeto agregador para ele executando QueryInterfaceo .

O procedimento a seguir descreve as etapas para remover uma propriedade usando IVsBuildPropertyStorageo .

Para remover uma propriedade de um arquivo de projeto do MSBuild

  1. Chamada QueryInterface do IVsBuildPropertyStorage subtipo de projeto.

  2. Chame RemoveProperty com pszPropName set para a propriedade que você deseja remover.

A persistência de dados em arquivos de projeto que não importa compilar é tratada por meio IPersistXMLFragmentdo .

Você pode implementar IPersistXMLFragment no objeto principal project subtype aggregator , no project subtype project configuration objeto ou em ambos.

Os pontos a seguir delineiam os principais conceitos relativos à persistência de informações não relacionadas à construção.

  • O projeto base chama o objeto agregador do subtipo de projeto principal (ou seja, o subtipo de projeto mais externo) para carregar e salvar dados independentes de configuração e chama os objetos de configuração de projeto do subtipo de projeto para carregar ou salvar dados dependentes da configuração.

  • O projeto base chama os métodos de várias vezes para cada nível de agregação de subtipo de IPersistXMLFragment projeto e passa o GUID para cada nível.

  • O projeto base passa ou recebe um fragmento XML dedicado a um subtipo de projeto específico e usa esse mecanismo como uma maneira de persistir o estado entre os níveis de agregação.

  • O projeto base chama a implementação do subtipo de IPersistXMLFragmentprojeto mais externo passando em um GUID. Se o GUID pertencer ao subtipo de projeto mais externo, ele manipulará a própria chamada; caso contrário, ele delega a chamada a um subtipo de projeto interno e assim por diante, até que o subtipo de projeto ao qual o GUID corresponde seja encontrado.

  • Um subtipo de projeto também pode modificar o fragmento XML antes ou depois de delegar a chamada a um subtipo de projeto interno. O exemplo a seguir mostra um trecho de um arquivo de projeto, onde um nome de um arquivo que contém propriedades específicas para um subtipo de projeto, é passado para esse subtipo de projeto.

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