Metadados de item em lotes de tarefa

MSBuildtem a capacidade de dividir as listas de itens em categorias diferentes ou em lotes, com base nos metadados de item e executar uma tarefa uma vez, com cada lote. Ele pode ser confuso compreender exatamente quais itens estão sendo passados com a qual o lote. Este tópico aborda os seguintes cenários comuns que envolvem o processamento em lotes.

  • A divisão de uma lista de itens em lotes

  • Dividindo a várias listas de itens em lotes

  • O lote de um item por vez

  • Listas de itens de filtragem

Para obter mais informações sobre lotes com MSBuild, consulte Processamento em lotes do MSBuild.

A divisão de uma lista de itens em lotes

Processamento em lotes permite dividir a uma lista de itens em lotes diferentes, com base nos metadados de item e passar a cada um dos lotes em uma tarefa separadamente. Isso é útil para criar assemblies satélites.

O exemplo a seguir mostra como dividir uma lista de itens em lotes com base nos metadados do item. O ExampColl item de lista é dividida em três lotes com base na Number metadados de item. A presença de %(ExampColl.Number)na Text atributo notifica MSBuild que o processamento em lotes deve ser realizado. O ExampColl item de lista é dividida em três lotes com base na Number metadados e cada lote é passado separadamente para a tarefa.

<Project
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
    
    <ItemGroup>
        <ExampColl Include="Item1">
            <Number>1</Number>
        </ExampColl>
        <ExampColl Include="Item2">
            <Number>2</Number>
        </ExampColl>
        <ExampColl Include="Item3">
            <Number>3</Number>
        </ExampColl>
        <ExampColl Include="Item4">
            <Number>1</Number>
        </ExampColl>
        <ExampColl Include="Item5">
            <Number>2</Number>
        </ExampColl>
        <ExampColl Include="Item6">
            <Number>3</Number>
        </ExampColl>
    </ItemGroup>

    <Target Name="ShowMessage">
        <Message
            Text = "Number: %(ExampColl.Number) -- Items in ExampColl: @(ExampColl)"/>
    </Target>

</Project>

O Tarefa de mensagem tarefas exibe as seguintes informações:

Number: 1 -- Items in ExampColl: Item1;Item4

Number: 2 -- Items in ExampColl: Item2;Item5

Number: 3 -- Items in ExampColl: Item3;Item6

Dividir o Item de várias listas em lotes

MSBuildpode dividir a várias listas de itens em lotes com base nos mesmos metadados. Isso facilita dividir a listas de itens diferentes em lotes para criar vários assemblies. Por exemplo, você poderia ter uma lista de itens de arquivos. cs, dividido em um lote de aplicativo e um lote de assembly e uma lista de itens de arquivos de recurso dividido em um lote de aplicativo e um lote de assembly. Você pode usar em lote para passar essas listas de itens em uma tarefa e construir o aplicativo e o assembly.

ObservaçãoObservação

Se uma lista de itens que estão sendo passada para uma tarefa não contiver itens com os metadados referenciado, cada item na lista item é passado em cada lote.

O exemplo a seguir mostra como dividir a lista de vários itens em lotes com base nos metadados do item. O ExampColl e ExampColl2 listas de itens são divididas em três lotes baseadas o Number metadados de item. A presença de %(Number)na Text atributo notifica MSBuild que o processamento em lotes deve ser realizado. O ExampColl e ExampColl2 listas de itens são divididas em três lotes baseadas o Number metadados e cada lote é passado separadamente para a tarefa.

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

        <ExampColl Include="Item1">
            <Number>1</Number>
        </ExampColl>
        <ExampColl Include="Item2">
            <Number>2</Number>
        </ExampColl>
        <ExampColl Include="Item3">
            <Number>3</Number>
        </ExampColl>

        <ExampColl2 Include="Item4">
            <Number>1</Number>
        </ExampColl2>
        <ExampColl2 Include="Item5">
            <Number>2</Number>
        </ExampColl2>
        <ExampColl2 Include="Item6">
            <Number>3</Number>
        </ExampColl2>

    </ItemGroup>

    <Target Name="ShowMessage">
        <Message
            Text = "Number: %(Number) -- Items in ExampColl: @(ExampColl) ExampColl2: @(ExampColl2)"/>
    </Target>

</Project>

O Tarefa de mensagem tarefas exibe as seguintes informações:

Number: 1 -- Items in ExampColl: Item1 ExampColl2: Item4

Number: 2 -- Items in ExampColl: Item2 ExampColl2: Item5

Number: 3 -- Items in ExampColl: Item3 ExampColl2: Item6

O lote de um Item por vez

Processamento em lotes também pode ser realizado nos metadados de item conhecido que é atribuído a cada item na criação. Isso garante que todos os itens em uma coleção terá alguns metadados para usar o processamento em lotes. O Identity o valor de metadados é exclusivo para cada item e é útil para a divisão de cada item em uma lista de itens em um lote separado. Para obter uma lista completa de metadados do item já conhecidos, consulte MSBuild conhecidos metadados de Item.

O exemplo a seguir mostra como cada item em uma lista de itens um de lote por vez. Porque o Identity o valor de metadados de cada item é exclusivo, o ExampColl item de lista é dividida em seis lotes, de cada lote que contém um item de lista de item. A presença de %(Identity)na Text atributo notifica MSBuild que o processamento em lotes deve ser realizado.

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

        <ExampColl Include="Item1"/>
        <ExampColl Include="Item2"/>
        <ExampColl Include="Item3"/>
        <ExampColl Include="Item4"/>
        <ExampColl Include="Item5"/>
        <ExampColl Include="Item6"/>

    </ItemGroup>

    <Target Name="ShowMessage">
        <Message
            Text = "Identity: &quot;%(Identity)&quot; -- Items in ExampColl: @(ExampColl)"/>
    </Target>

</Project>

O Tarefa de mensagem tarefas exibe as seguintes informações:

Identity: "Item1" -- Items in ExampColl: Item1
Identity: "Item2" -- Items in ExampColl: Item2
Identity: "Item3" -- Items in ExampColl: Item3
Identity: "Item4" -- Items in ExampColl: Item4
Identity: "Item5" -- Items in ExampColl: Item5
Identity: "Item6" -- Items in ExampColl: Item6

Listas de itens de filtragem

Processamento em lotes pode ser usado para filtrar certos itens de uma lista de itens antes de transmiti-la a uma tarefa. Por exemplo, filtrando o Extension o valor de metadados do item conhecidos permite a execução de uma tarefa em somente arquivos com uma extensão específica.

O exemplo a seguir mostra como dividir uma lista de itens em lotes com base nos metadados de item e filtre os lotes quando eles são passados em uma tarefa. O ExampColl item de lista é dividida em três lotes com base na Number metadados de item. O Condition atributo da tarefa Especifica que somente lotes com um Number valor de metadados de item de 2 será passado para a tarefa.

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

        <ExampColl Include="Item1">
            <Number>1</Number>
        </ExampColl>
        <ExampColl Include="Item2">
            <Number>2</Number>
        </ExampColl>
        <ExampColl Include="Item3">
            <Number>3</Number>
        </ExampColl>
        <ExampColl Include="Item4">
            <Number>1</Number>
        </ExampColl>
        <ExampColl Include="Item5">
            <Number>2</Number>
        </ExampColl>
        <ExampColl Include="Item6">
            <Number>3</Number>
        </ExampColl>

    </ItemGroup>

    <Target Name="Exec">
        <Message
            Text = "Items in ExampColl: @(ExampColl)"
            Condition="'%(Number)'=='2'"/>
    </Target>

</Project>

O Tarefa de mensagem tarefas exibe as seguintes informações:

Items in ExampColl: Item2;Item5

Consulte também

Referência

MSBuild conhecidos metadados de Item

Elemento de item (MSBuild)

Elemento de ItemMetadata (MSBuild)

Conceitos

Processamento em lotes do MSBuild

Outros recursos

MSBuild Concepts

Referência do MSBuild