Partilhar via


Tarefa MSBuild

Cria projetos do MSBuild a partir de outro projeto do MSBuild.

Parâmetros

A tabela a seguir descreve os parâmetros da tarefa MSBuild.

Parâmetro Descrição
BuildInParallel Parâmetro Boolean opcional.

Se true, os projetos especificados no parâmetro Projects são construídos em paralelo, se possível. A predefinição é false.
Projects Parâmetro de ITaskItem[] necessário.

Especifica os arquivos de projeto a serem compilados.
Properties Parâmetro String opcional.

Uma lista delimitada por ponto-e-vírgula de pares nome/valor de propriedade a serem aplicados como propriedades globais ao projeto filho. Quando você especifica esse parâmetro, ele é funcionalmente equivalente à configuração de propriedades que têm a opção -property quando você cria com MSBuild.exe. Por exemplo:

Properties="Configuration=Debug;Optimize=$(Optimize)"

Quando você passa propriedades para o projeto através do parâmetro Properties, MSBuild pode criar uma nova instância do projeto, mesmo se o arquivo de projeto já tiver sido carregado. MSBuild cria uma única instância de projeto para um determinado caminho de projeto e um conjunto exclusivo de propriedades globais. Por exemplo, esse comportamento permite que você crie várias tarefas do MSBuild que chamam myproject.proj, com Configuration=Release e você obtém uma única instância de myproject.proj (se nenhuma propriedade exclusiva for especificada na tarefa). Se você especificar uma propriedade que ainda não foi vista pelo MSBuild, o MSBuild criará uma nova instância do projeto, que pode ser criada em paralelo com outras instâncias do projeto. Por exemplo, uma configuração Release pode ser compilada ao mesmo tempo que uma configuração Debug.
RebaseOutputs Parâmetro Boolean opcional.

Se true, os caminhos relativos dos itens de saída de destino dos projetos construídos têm seus caminhos ajustados para serem relativos ao projeto chamador. A predefinição é false.
RemoveProperties Parâmetro String opcional.

Especifica o conjunto de propriedades globais a serem removidas.
RunEachTargetSeparately Parâmetro Boolean opcional.

Se true, a tarefa MSBuild invoca cada destino na lista passada para o MSBuild um de cada vez, em vez de ao mesmo tempo. Definir esse parâmetro como true garante que os destinos subsequentes sejam invocados mesmo se os destinos invocados anteriormente falharem. Caso contrário, um erro de compilação interromperia a invocação de todos os destinos subsequentes. A predefinição é false.
SkipNonexistentProjects Parâmetro Boolean opcional.

Se true, os arquivos de projeto que não existem no disco serão ignorados. Caso contrário, tais projetos causarão um erro. O padrão é false.
SkipNonexistentTargets Parâmetro Boolean opcional.

Se true, os arquivos de projeto que existem, mas não contêm o Targets nomeado, são ignorados. Caso contrário, tais projetos causarão um erro. O padrão é false. Introduzido no MSBuild 15.5.
StopOnFirstFailure Parâmetro Boolean opcional.

Se true, quando um dos projetos não consegue construir, não são construídos mais projetos. Atualmente, esta opção não é suportada ao construir em paralelo (com vários processadores).
TargetAndPropertyListSeparators Parâmetro String[] opcional.

Especifica uma lista de destinos e propriedades como Project metadados do item). Os separadores não escapam antes do processamento. Por exemplo, %3B (um «;» escapado) é tratado como se fosse um «;» não escapado.
TargetOutputs Opcional ITaskItem[] parâmetro de saída somente leitura.

Retorna as saídas dos destinos construídos de todos os arquivos de projeto. Somente as saídas dos destinos que foram especificados são retornadas, não quaisquer saídas que possam existir em destinos dos quais esses destinos dependem.

O parâmetro TargetOutputs também contém os seguintes metadados:

- MSBuildSourceProjectFile: O arquivo de projeto MSBuild que contém o destino que define as saídas.
- MSBuildSourceTargetName: O alvo que definiu as saídas. Nota: Se você quiser identificar as saídas de cada arquivo de projeto ou destino separadamente, execute a tarefa MSBuild separadamente para cada arquivo de projeto ou destino. Se você executar a tarefa MSBuild apenas uma vez para construir todos os arquivos de projeto, as saídas de todos os destinos serão coletadas em uma matriz.
Targets Parâmetro String opcional.

Especifica o destino ou destinos a serem criados nos arquivos de projeto. Use um ponto-e-vírgula para separar uma lista de nomes de destino. Se nenhum destino for especificado na tarefa MSBuild, os destinos padrão especificados nos arquivos de projeto serão criados. Nota: Os destinos devem ocorrer em todos os arquivos do projeto. Se isso não acontecer, ocorrerá um erro de compilação.
ToolsVersion Parâmetro String opcional.

Especifica a ToolsVersion a ser usada ao criar projetos passados para essa tarefa.

Permite que uma tarefa do MSBuild crie um projeto destinado a uma versão diferente do .NET Framework que a especificada no projeto. Os valores válidos são 2.0, 3.0e 3.5. O valor padrão é 3.5.

Observações

Além dos parâmetros listados anteriormente, essa tarefa herda parâmetros da classe TaskExtension, que herda da classe Task. Para obter uma lista desses parâmetros adicionais e suas descrições, consulte classe base TaskExtension.

Ao contrário de usar o de tarefas Exec para iniciar MSBuild.exe, essa tarefa usa o mesmo processo MSBuild para criar os projetos filho. A lista de destinos já criados que podem ser ignorados é compartilhada entre as compilações pai e filho. Esta tarefa também é mais rápida porque nenhum novo processo MSBuild é criado.

Esta tarefa pode processar não apenas arquivos de projeto, mas também arquivos de solução. No MSBuild 17.12 e posterior, os formatos de arquivo de solução .slnx e .sln são aceitos.

Qualquer configuração exigida pelo MSBuild para permitir que projetos sejam compilados ao mesmo tempo, mesmo que a configuração envolva infraestrutura remota (por exemplo, portas, protocolos, tempos limites, tentativas e assim por diante), deve ser configurada usando um arquivo de configuração. Sempre que possível, os itens de configuração devem poder ser especificados como parâmetros de tarefa na tarefa MSBuild.

A partir do MSBuild 3.5, os projetos de solução agora apresentam TargetOutputs de todos os subprojetos que cria.

Passar propriedades para projetos

Em versões do MSBuild anteriores ao MSBuild 3.5, passar diferentes conjuntos de propriedades para diferentes projetos listados no item MSBuild era um desafio. Se você usou o atributo Properties do de tarefas do MSBuild, sua configuração foi aplicada a todos os projetos que estão sendo criados, a menos que você tenha colocado em lote a tarefa MSBuild e fornecido condicionalmente propriedades diferentes para cada projeto na lista de itens.

MSBuild 3.5, no entanto, fornece dois novos itens de metadados reservados, Properties e AdditionalProperties, que fornecem uma maneira flexível de passar propriedades diferentes para diferentes projetos que estão sendo criados usando o tarefa MSBuild.

Observação

Esses novos itens de metadados são aplicáveis somente aos itens passados no atributo Projects da tarefa MSBuild.

Benefícios da compilação de vários processadores

Um dos principais benefícios de usar esses novos metadados ocorre quando você constrói seus projetos em paralelo em um sistema com vários processadores. Os metadados permitem que você consolide todos os projetos em um único tarefa MSBuild chamada sem ter que executar qualquer lote ou tarefas condicionais do MSBuild. E quando você chama apenas uma única tarefa do MSBuild, todos os projetos listados no atributo Projects são criados em paralelo. (Apenas, no entanto, se o atributo BuildInParallel=true estiver presente na tarefa MSBuild.) Para obter mais informações, consulte Criar vários projetos em paralelo.

Metadados de propriedades

Quando especificado, os metadados Properties substituem o parâmetro Properties da tarefa, enquanto metadados AdditionalProperties são acrescentados às definições do parâmetro.

Um cenário comum é quando você está criando vários arquivos de solução usando a tarefa MSBuild, usando apenas configurações de compilação diferentes. Você pode querer criar a solução a1 usando a configuração Debug e a solução a2 usando a configuração Release. No MSBuild 2.0, esse arquivo de projeto teria a seguinte aparência:

Observação

No exemplo a seguir, "..." representa arquivos de solução adicionais.

a.proj

<Project>
    <Target Name="Build">
        <MSBuild Projects="a1.sln..." Properties="Configuration=Debug"/>
        <MSBuild Projects="a2.sln" Properties="Configuration=Release"/>
    </Target>
</Project>

Usando os metadados Properties, no entanto, você pode simplificar esse código para usar uma única tarefa MSBuild, conforme mostrado pelo exemplo a seguir:

a.proj

<Project>
    <ItemGroup>
        <ProjectToBuild Include="a1.sln...">
            <Properties>Configuration=Debug</Properties>
        </ProjectToBuild>
        <ProjectToBuild Include="a2.sln">
            <Properties>Configuration=Release</Properties>
        </ProjectToBuild>
    </ItemGroup>
    <Target Name="Build">
        <MSBuild Projects="@(ProjectToBuild)"/>
    </Target>
</Project>

- ou -

<Project>
    <ItemGroup>
        <ProjectToBuild Include="a1.sln..."/>
        <ProjectToBuild Include="a2.sln">
            <Properties>Configuration=Release</Properties>
        </ProjectToBuild>
    </ItemGroup>
    <Target Name="Build">
        <MSBuild Projects="@(ProjectToBuild)"
          Properties="Configuration=Debug"/>
    </Target>
</Project>

Metadados AdditionalProperties

Considere o seguinte cenário em que você está criando dois arquivos de solução usando a tarefa MSBuild, ambos usando a configuração Release, mas um usando a arquitetura x86 e o outro usando a arquitetura ia64. No MSBuild 2.0, você precisaria criar várias instâncias da tarefa MSBuild: uma para construir o projeto usando a configuração Release com a arquitetura x86, a outra usando a configuração Release com a arquitetura ia64. Seu arquivo de projeto teria a seguinte aparência:

a.proj

<Project>
    <Target Name="Build">
        <MSBuild Projects="a1.sln..." Properties="Configuration=Release;
          Architecture=x86"/>
        <MSBuild Projects="a2.sln" Properties="Configuration=Release;
          Architecture=ia64"/>
    </Target>
</Project>

Usando os metadados AdditionalProperties, você pode simplificar isso para usar um único de tarefas do MSBuild usando o seguinte:

a.proj

<Project>
    <ItemGroup>
        <ProjectToBuild Include="a1.sln...">
            <AdditionalProperties>Architecture=x86
              </AdditionalProperties>
        </ProjectToBuild>
        <ProjectToBuild Include="a2.sln">
            <AdditionalProperties>Architecture=ia64
              </AdditionalProperties>
        </ProjectToBuild>
    </ItemGroup>
    <Target Name="Build">
        <MSBuild Projects="@(ProjectToBuild)"
          Properties="Configuration=Release"/>
    </Target>
</Project>

Exemplo

O exemplo a seguir usa a tarefa MSBuild para criar os projetos especificados pela coleção ProjectReferences item. As saídas de destino resultantes são armazenadas na coleção de itens AssembliesBuiltByChildProjects.

<Project>

    <ItemGroup>
        <ProjectReferences Include="*.*proj" />
    </ItemGroup>

    <Target Name="BuildOtherProjects">
        <MSBuild
            Projects="@(ProjectReferences)"
            Targets="Build">
            <Output
                TaskParameter="TargetOutputs"
                ItemName="AssembliesBuiltByChildProjects" />
        </MSBuild>
    </Target>

</Project>

Ver também