Processamento em lotes do MSBuild
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 ou o destino uma vez com cada lote.
O processamento em lotes de tarefa
O processamento em lotes de tarefa permite simplificar seus arquivos de projeto, fornecendo uma maneira de dividir a listas de itens em lotes diferentes e passar a cada um desses lotes em uma tarefa separadamente. Isso significa que um arquivo de projeto só precisa ter a tarefa e seus atributos declarados uma vez, mesmo que ele possa ser executado várias vezes.
Especificar o que você deseja MSBuild para executar o processamento em lotes com uma tarefa usando o %(ItemMetaDataName) a notação em um dos atributos da tarefa. O exemplo seguinte divide a Example a lista de itens em lotes com base na Color o valor de metadados do item e passa os lotes para a MyTask tarefas separadamente.
Observação |
---|
Se você não fizer referência a lista de itens em outro lugar na lista atributos de tarefa ou o nome de metadados pode ser ambíguo, você pode usar o %(ItemCollection.ItemMetaDataName) a notação para qualificar totalmente o valor de metadados do item a ser usado para processamento em lotes. |
<Project
xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Example Include="Item1">
<Color>Blue</Color>
</Example>
<Example Include="Item2">
<Color>Red</Color>
</Example>
</ItemGroup>
<Target Name="RunMyTask">
<MyTask
Sources = "@(Example)"
Output = "%(Color)\MyFile.txt"/>
</Target>
</Project>
Para obter exemplos de lotes mais específicos, consulte Metadados de item em lotes de tarefa.
O processamento em lotes de destino
MSBuildverifica se as entradas e saídas de um destino estão atualizadas antes de executar o destino. Se as entradas e saídas são atualizadas, o destino é ignorado. Se uma tarefa dentro de um destino usa o processamento em lotes, MSBuild precisa determinar se as entradas e saídas para cada lote de itens é atualizada. Caso contrário, o destino é executado sempre que ele é atingido.
A exemplo a seguir mostra um Target elemento que contém um Outputs de atributo com o %(ItemMetaDataName) notação. MSBuilddivide a Example a lista de itens em lotes com base na Color item de metadados e analisar os carimbos de hora dos arquivos de saída para cada lote. Se as saídas de um lote não estão atualizadas, o destino é executado. Caso contrário, o destino é ignorado.
<Project
xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Example Include="Item1">
<Color>Blue</Color>
</Example>
<Example Include="Item2">
<Color>Red</Color>
</Example>
</ItemGroup>
<Target Name="RunMyTask"
Inputs="@(Example)"
Outputs="%(Color)\MyFile.txt">
<MyTask
Sources = "@(Example)"
Output = "%(Color)\MyFile.txt"/>
</Target>
</Project>
Outro exemplo de processamento em lotes de destino, consulte Metadados de item em lotes de destino.
Funções de propriedade usando metadados
Processamento em lotes pode ser controlado pelas funções de propriedade incluem metadados. Por exemplo,
$([System.IO.Path]::Combine($(RootPath),%(Compile.Identity)))
usa Combine para combinar um caminho de pasta raiz com um item de compilação Path.
Funções de propriedade não podem aparecer dentro de valores de metadados. Por exemplo,
%(Compile.FullPath.Substring(0,3))
não é permitido.
Para obter mais informações sobre funções de propriedade, consulte Funções de propriedade.
Consulte também
Referência
Elemento de ItemMetadata (MSBuild)