Conservación de datos en el archivo de proyecto de MSBuild

Es posible que un subtipo de proyecto necesite conservar datos específicos de subtipos en el archivo del proyecto para su uso posterior. Un subtipo de proyecto usa la persistencia del archivo de proyecto para cumplir los siguientes requisitos:

  1. Conservar los datos usados como parte de la creación del proyecto. (Para obtener más información sobre microsoft Build Engine, consulte MSBuild.) La información relacionada con la compilación puede:

    1. Datos independientes de la configuración. Es decir, los datos almacenados en elementos de MSBuild con condiciones en blanco o que faltan.

    2. Datos dependientes de la configuración. Es decir, los datos almacenados en elementos de MSBuild que están condicionados para una configuración de proyecto determinada. Por ejemplo:

      <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
      
  2. Conservar los datos que no son relevantes para la compilación. Estos datos se pueden expresar en XML de forma libre que no se validan con un esquema XML.

    1. Datos independientes de la configuración.

    2. Datos dependientes de la configuración.

La persistencia de los datos útiles para compilar un proyecto se controla a través de MSBuild. El sistema DE MSBuild mantiene una tabla maestra de información relacionada con la compilación. Los subtipos de proyecto son responsables de acceder a estos datos para obtener y establecer valores de propiedad. Los subtipos de proyecto también pueden aumentar la tabla de datos relacionada con la compilación agregando propiedades adicionales que se van a conservar y quitando propiedades para que no se conserven.

Para modificar los datos de MSBuild, un subtipo de proyecto es responsable de recuperar el objeto de propiedad de MSBuild desde el sistema de proyecto base a través IVsBuildPropertyStoragede . IVsBuildPropertyStorage es una interfaz implementada en el sistema de proyecto principal y la agregación de consultas de subtipo de proyecto para él mediante la ejecución QueryInterfacede .

En el procedimiento siguiente se describen los pasos para quitar una propiedad mediante IVsBuildPropertyStorage.

Para quitar una propiedad de un archivo de proyecto de MSBuild

  1. IVsBuildPropertyStorage Llame al QueryInterface subtipo del proyecto.

  2. Llame RemoveProperty a con pszPropName establecido en la propiedad que desea quitar.

La persistencia de datos en archivos de proyecto que no importa compilar se controla a través de IPersistXMLFragment.

Puede implementar IPersistXMLFragment en el objeto principal project subtype aggregator , el project subtype project configuration objeto o ambos.

En los puntos siguientes se describen los conceptos principales relacionados con la persistencia de información relacionada con la no compilación.

  • El proyecto base llama al subtipo principal del proyecto (es decir, el subtipo del proyecto externo) para cargar y guardar datos independientes de configuración, y llama a en los objetos de configuración del subtipo del proyecto para cargar o guardar datos dependientes de la configuración.

  • El proyecto base llama a los métodos de varias veces para cada nivel de IPersistXMLFragment agregación de subtipo de proyecto y pasa el GUID para cada nivel.

  • El proyecto base pasa o recibe un fragmento XML dedicado a un subtipo de proyecto determinado y usa este mecanismo como una forma de conservar el estado entre los niveles de agregación.

  • El proyecto base llama a la implementación del subtipo de IPersistXMLFragmentproyecto más externo que pasa un GUID. Si el GUID pertenece al subtipo de proyecto más externo, controla la propia llamada; de lo contrario, delega la llamada a un subtipo de proyecto interno, etc., hasta que se encuentre el subtipo del proyecto al que corresponde el GUID.

  • Un subtipo de proyecto también puede modificar el fragmento XML antes o después de delegar la llamada a un subtipo de proyecto interno. En el ejemplo siguiente se muestra un extracto de un archivo de proyecto, donde se pasa un nombre de un archivo que contiene propiedades específicas de un subtipo de proyecto a ese subtipo de proyecto.

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