Compartir vía


Trabajar con metadatos de elementos en el procesamiento por lotes de destino

MSBuild puede realizar el análisis de dependencias de las entradas y las salidas de un destino de compilación. Si se determina que las entradas o las salidas del destino están actualizadas, el destino se omite y la compilación continúa. Los elementos Target usan los atributos Inputs y Outputs para especificar los elementos que se van a inspeccionar durante el análisis de dependencias.

Si un destino contiene una tarea que usa elementos procesados por lotes como entradas o salidas, el elemento Target del destino debe usar el procesamiento por lotes en sus atributos Inputs o Outputs para permitir que MSBuild omita los lotes de elementos que ya están actualizados.

Destinos de lotes

El ejemplo siguiente contiene una lista de elementos denominada Res que se divide en dos lotes en función de los metadatos del elemento Culture. Cada uno de estos lotes se pasa a la tarea AL, que crea un ensamblado de salida para cada lote. Mediante el uso del procesamiento por lotes en el atributo Outputs del elemento Target, MSBuild puede determinar si cada lote individual está actualizado antes de ejecutar el destino. Si no se usara el procesamiento por lotes de destinos, la tarea ejecutaría ambos lotes de elementos cada vez que se ejecutara el destino.

<Project
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <ItemGroup>
        <Res Include="Strings.fr.resources">
            <Culture>fr</Culture>
        </Res>
        <Res Include="Strings.jp.resources">
            <Culture>jp</Culture>
        </Res>
        <Res Include="Menus.fr.resources">
            <Culture>fr</Culture>
        </Res>
        <Res Include="Dialogs.fr.resources">
            <Culture>fr</Culture>
        </Res>
        <Res Include="Dialogs.jp.resources">
            <Culture>jp</Culture>
        </Res>
        <Res Include="Menus.jp.resources">
            <Culture>jp</Culture>
        </Res>
    </ItemGroup>

    <Target Name="Build"
        Inputs="@(Res)"
        Outputs="%(Culture)\MyApp.resources.dll">

        <AL Resources="@(Res)"
            TargetType="library"
            OutputAssembly="%(Culture)\MyApp.resources.dll">
        </AL>

    </Target>

</Project>