Compartir a través de


Nuevos métodos para manipular elementos y propiedades (MSBuild)

Actualización: noviembre 2007

A partir de MSBuild 3.5, puede hacer lo siguiente:

  • Definir un grupo de definición de elementos que contenga los metadatos que se aplican a todos los elementos del proyecto.

  • Crear, eliminar, combinar o cambiar dinámicamente las propiedades, los elementos y los metadatos de elementos de un grupo de elementos. Puede hacer esto en lugar de utilizar las tareas CreateItem y CreateProperty.

Grupos de definición de elementos

El elemento ItemDefinitionGroup permite definir un conjunto de definiciones de elementos, que son los valores de los metadatos que se aplican a todos los elementos del proyecto de forma predeterminada. Para obtener más información, vea Definiciones de elementos.

Ajustar dinámicamente los metadatos de un grupo de elementos

MSBuild utiliza Elemento ItemGroup (MSBuild) y Elemento PropertyGroup (MSBuild) para declarar estáticamente elementos y propiedades. En MSBuild 2.0, cuando se quería crear o modificar propiedades y elementos durante la compilación, era necesario utilizar CreateItem (Tarea) o CreateProperty (Tarea). Este proceso era tedioso y no admitía bien las actualizaciones dinámicas. Sin embargo, MSBuild 3.5 permite crear, eliminar, combinar o cambiar dinámicamente las propiedades, los elementos y los metadatos de elementos directamente en un grupo de elementos.

Compare los siguientes ejemplos. El ejemplo 1 muestra cómo utilizar la tarea CreateItem para agregar un parámetro de tarea y crear una nueva lista de elementos junto con los metadatos. El ejemplo 3 muestra el nuevo método de agregar directamente los metadatos a ItemGroup.

Ejemplo 1: ejemplo sencillo de cómo agregar un parámetro de tarea mediante la tarea CreateItem. El primer destino utiliza la tarea CreateItem para crear dinámicamente una nueva lista de elementos denominada CultureResource. El segundo destino agrega los nuevos metadatos, denominados TargetDirectory, para todos los recursos Culture de la lista original.

<Target Name="GenerateBeforeCompile">
     <CreateItem Include="SomeGeneratedCode.cs">
        <Output TaskParameter="Include" ItemName="Compile" /> 
    </CreateItem>
</Target>

<Target Name="ProcessCultureResources">
    <CreateItem Include="@(EmbeddedResource)" 
      Condition="'%(Culture)' != ''"
      AdditionalMetadata="TargetDirectory=%
      (EmbeddedResource.Culture)">
    <Output TaskParameter="Include" ItemName="CultureResource" />
    </CreateItem>
</Target>

Ejemplo 2: ahora, los resultados de los ejemplos anteriores se pueden obtener agregando directamente los parámetros y metadatos a ItemGroup.

<Target Name="GenerateBeforeCompile">
     <ItemGroup>
        <Compile Include="SomeGeneratedCode.cs" />
    </ItemGroup>
 </Target>
 
<Target Name="ProcessCultureResources">
    <ItemGroup>
        <CultureResource Include="@(EmbeddedResource)"
          Condition="'%(EmbeddedResource.Culture)' != ''">
             <TargetDirectory>%(EmbeddedResource.Culture) </TargetDirectory>
        </CultureResource>
    </ItemGroup>
</Target>

Quitar elementos

Para omitir elementos de las listas en versiones anteriores de MSBuild, era necesario crear listas nuevas. Sin embargo, ahora puede quitar directamente los elementos mediante el nuevo parámetro Remove, como se muestra a continuación:

<ItemGroup>
    <!—Remove *.licx from the EmbeddedResource list - ->
    <EmbeddedResource Remove="*.licx" />
 
    <!—Or remove items in @(licx) from EmbeddedResource list -- >
    <EmbeddedResource Remove="@(licx)" />
</ItemGroup>

Vea también

Conceptos

Referencia de esquemas del archivo de proyecto MSBuild

Otros recursos

Conceptos de MSBuild