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çãoObservaçã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)

Conceitos

Conceitos Avançado do MSBuild

Outros recursos

MSBuild Concepts

Referência do MSBuild