Como: Tarefas em lote usando metadados de item
MSBuild tem a capacidade de dividir coleções de itens em categorias diferentes ou em lotes, com base nos metadados do item e executar uma tarefa um time com cada lote. Pode ser confuso compreender exatamente quais itens estão sendo passados com os lotes.Este tópico aborda os seguintes cenários comuns que envolvem o envio em lote.
Dividindo um item coleção em lotes
Dividindo vários item coleções em lotes
envio em lote a um item por um time
Filtragem de coleções de item
Para obter mais informações sobre o envio em lote com MSBuild, consulte envio em lote MSBuild.
Dividindo uma coleção de item em lotes
envio em lote permite que você divida uma coleção de itens em envio em lote diferentes com base nos metadados de item e passar todos os envio em lote separadamente em uma tarefa.Isso é útil para criar assemblies satélites.
O exemplo a seguir mostra como dividir uma coleção de itens em lotes com base nos metadados do item.The ExampColl item de coleção é dividida em três lotes com base na Number metadados de item. A presença de %(ExampColl.Number)no Text atributo notifica MSBuild que envio em lote deve ser executada. The ExampColl item de coleção é 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>
The Tarefas de mensagem 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
Dividindo várias coleções de item em lotes
MSBuild pode dividir múltiplo item coleções em lotes com base nos mesmos metadados. Isso torna mais fácil dividir coleções de item diferente em lotes para compilação vários assemblies.Por exemplo, você poderia ter um item coleção de arquivos. cs dividido em um lote de aplicativo e um lote de assembly e um item coleção de arquivos de recurso dividido em um lote de aplicativo e um lote de assembly.Você pode usar o lote passar essas coleções de item em uma tarefa e criar o aplicativo e o assembly.
Observação: |
---|
Se uma coleção de item que está sendo passada para uma tarefa não contém itens com os metadados referenciado, cada item na coleção item é passado em cada lote. |
O exemplo a seguir mostra como dividir vários coleção de itens em lotes com base nos metadados do item.The ExampColl e ExampColl2 item coleções cada dividem-se em três lotes com base na Number metadados de item. A presença de %(Number)no Text atributo notifica MSBuild que envio em lote deve ser executada. The ExampColl e ExampColl2 coleções de item são divididas 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>
<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>
The Tarefas de mensagem 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
envio em lote a um item em um time
envio em lote 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 envio em lote.The Identity valor de metadados é exclusiva para cada item e é útil para dividir cada item em uma coleção de itens em um lote separado. Para obter uma lista completa de metadados de item já conhecidos, consulte O MSBuild Well-known metadados de item.
O exemplo a seguir mostra como cada item em uma coleção de item uma vez de lote.Porque o Identity valor de metadados de cada item é exclusivo, o ExampColl item de coleção é dividida em seis lotes, cada lote que contém um item da coleção de item. A presença de %(Identity)no Text atributo notifica MSBuild que envio em lote deve ser executada.
<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>
The Tarefas de mensagem 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
Filtragem de coleções de item
envio em lote pode ser usado para filtrar certos itens de uma coleção de itens antes de transmiti-la a uma tarefa.Por exemplo, filtrando o Extension valor de metadados de item conhecidos permite que você executar uma tarefa em somente arquivos com uma extensão específica.
O exemplo a seguir mostra como dividir uma coleção de itens em lotes com base nos metadados de item e filtre os lotes quando eles são passados em uma tarefa.The ExampColl item de coleção é dividida em três lotes com base na Number metadados de item. The 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>
The Tarefas de mensagem tarefa exibe as seguintes informações:
Items in ExampColl: Item2;Item5
Consulte também
Conceitos
Referência
O MSBuild Well-known metadados de item
Elemento ItemMetadata (MSBuild)