Compartilhar via


Metadados de item em lotes de tarefa

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

  • Dividindo uma lista de itens em lotes

  • Dividindo várias listas de itens em lotes

  • O lote de um item por vez

  • Filtragem de listas de itens

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

Dividindo uma lista de itens em lotes

Processamento em lotes permite que você divida uma lista de itens em lotes diferentes com base nos metadados de item e passar 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 em metadados do item.O ExampColl item lista é dividida em três lotes com base na Number metadados do item.A presença de %(ExampColl.Number)na Text atributo notifica MSBuild que o processamento em lotes deve ser realizado.O ExampColl item lista é dividida em três lotes com base na Number metadados e cada lote é passado separadamente na 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 Message tarefa 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 várias listas em lotes

MSBuildpode dividir várias listas de itens em lotes com base nos mesmos metadados.Isso facilita dividir listas diferentes de itens 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 lista de arquivos de recurso dividido em um lote de aplicativo e um lote de assembly.Você pode usar o lote para passar essas listas de item em uma tarefa e criar o aplicativo e o assembly.

ObservaçãoObservação

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

O exemplo a seguir mostra como dividir vários lista de itens em lotes com base em metadados do item.O ExampColl e ExampColl2 listas de itens são divididas em três lotes com base na Number metadados do 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 com base no Number metadados e cada lote é passado separadamente na 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 Message tarefa 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 executado em metadados de item conhecido que é atribuído a cada item durante a criação.Isso garante que cada item em uma coleção terá alguns metadados para processamento em lotes.O Identity valor de metadados é exclusivo para cada item e é útil para dividir cada item em uma lista de itens em um lote separado.Para obter uma lista completa de metadados do item conhecidas, consulte MSBuild bem conhecidas metadados de Item.

O exemplo a seguir mostra como cada item em uma lista de lote por vez.Porque o Identity valor de metadados de cada item é exclusivo, o ExampColl item lista é dividida em seis lotes, cada lote que contém um item da lista de itens.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 Message tarefa 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 passá-la para uma tarefa.Por exemplo, filtragem de Extension valor de metadados de item conhecidos permite executar 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 para uma tarefa.O ExampColl item lista é dividida em três lotes com base na Number metadados do item.O Condition atributo da tarefa Especifica que somente lotes com um Number item o valor de metadados 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 Message tarefa exibe as seguintes informações:

Items in ExampColl: Item2;Item5

Consulte também

Referência

MSBuild bem conhecidas metadados de Item

Elemento de item (MSBuild)

Elemento de ItemMetadata (MSBuild)

Conceitos

Processamento em lotes do MSBuild

Outros recursos

Conceitos do MSBuild

Referência do MSBuild