Compartir a través de


Procesamiento por lotes de MSBuild

Actualización: noviembre 2007

MSBuild tiene la capacidad de dividir las colecciones de elementos en distintas categorías, o lotes, basándose en los metadatos de estos elementos, y luego ejecutar un destino o una tarea una vez con cada lote.

Procesamiento por lotes de tareas

El procesamiento por lotes de tareas permite simplificar los archivos del proyecto al facilitar un modo de dividir las colecciones de elementos en diferentes lotes y pasar cada uno de ellos a una tarea independientemente. Esto significa que un archivo de proyecto sólo tiene que declarar una vez la tarea y sus atributos, aunque se pueda ejecutar varias veces.

Es posible especificar que se desea que MSBuild realice el procesamiento por lotes con una tarea mediante la notación %(ItemMetaDataName) en uno de los atributos de la tarea. El ejemplo siguiente divide la colección de elementos Example en lotes basándose en el valor de los metadatos de elementos Color, y pasa cada lote a la tarea MyTask por separado.

Nota:

Si no se hace referencia a la colección de elementos en ninguna parte de los atributos de la tarea o si el nombre de los metadatos fuera ambiguo, se podría usar la notación %(ItemCollection.ItemMetaDataName) para que el valor de los metadatos de elementos tuviera un nombre completo que se pudiera utilizar en el procesamiento por lotes.

<Project
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    
    <ItemGroup>
        <Example Include="Item1">
            <Color>Blue</Color>
        </Example>
        <Example Include="Item2">
            <Color>Red</Color>
        </Example>
    </ItemGroup>

    <Target Name="RunMyTask">
        <MyTask
            Sources = "@(Example)"
            Output = "%(Color)\MyFile.txt"/>
    </Target>

</Project>

Para obtener ejemplos sobre el procesamiento por lotes más concretos, vea Cómo: Procesar tareas por lotes utilizando metadatos de elementos.

Procesamiento por lotes de destinos

MSBuild comprueba si las entradas y los resultados de un destino están actualizados antes de ejecutar el destino. Si las entradas y los resultados están actualizados, se omite el destino. Si una tarea incluida en un destino usa el procesamiento por lotes, MSBuild debe determinar si las entradas y los resultados de cada lote de elementos están actualizados. De lo contrario, el destino se ejecutará cada vez que se alcance.

El ejemplo siguiente muestra un elemento Target que contiene un atributo Outputs con la notación%(ItemMetaDataName). MSBuild dividirá la colección de elementos Example en lotes, basándose en los metadatos de elementos Color, y analizará las marcas de tiempo de los archivos de resultados de cada lote. Si los resultados de un lote no están actualizados, se ejecutará el destino. De lo contrario, se omitirá el destino.

<Project
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    
    <ItemGroup>
        <Example Include="Item1">
            <Color>Blue</Color>
        </Example>
        <Example Include="Item2">
            <Color>Red</Color>
        </Example>
    </ItemGroup>

    <Target Name="RunMyTask"
        Inputs="@(Example)"
        Outputs="%(Color)\MyFile.txt">
        <MyTask
            Sources = "@(Example)"
            Output = "%(Color)\MyFile.txt"/>
    </Target>

</Project>

Para obtener otro ejemplo de procesamiento por lotes de destinos, vea Cómo: Procesar destinos por lotes utilizando metadatos de elementos.

Vea también

Conceptos

Conceptos avanzados de MSBuild

Referencia

Elemento ItemMetadata (MSBuild)

Otros recursos

Conceptos de MSBuild

Referencia de MSBuild