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çã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: "%(Identity)" -- 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 ItemMetadata (MSBuild)
Conceitos
Processamento em lotes do MSBuild