Criar vários projetos em paralelo com o MSBuild

Você pode usar o MSBuild para criar vários projetos mais rápido, executando-os em paralelo. Para executar compilações em paralelo, você pode usar as seguintes configurações em um computador com processador de vários núcleos ou vários processadores:

  • Opção -maxcpucount em um prompt de comando.

  • O parâmetro de tarefa BuildInParallel em uma tarefa do MSBuild.

Observação

A opção -verbosity (-v) em uma linha de comando também pode afetar o desempenho de compilação. O desempenho de compilação pode piorar se o detalhamento de suas informações de log de compilação estiver definido como detalhado ou diagnóstico, que são usados para solução de problemas. Para saber mais, confira Obter logs de build e Referências de linha de comando.

Opção -maxcpucount

Se você usar a opção -maxcpucount, ou -m de forma abreviada, o MSBuild criará o número especificado de processos do MSBuild.exe que podem ser executados em paralelo. Esses processos também são conhecidos como "processos de trabalho". Cada processo de trabalho usa um núcleo ou processador separado, se houver algum disponível, para compilar um projeto ao mesmo tempo em que outros processadores disponíveis criam outros projetos. Por exemplo, definir essa opção para um valor de "4" faz com que o MSBuild crie quatro processos de trabalho para compilar o projeto.

Se você incluir a opção -maxcpucount sem especificar um valor, o MSBuild usará o número de processadores no computador.

Para obter mais informações sobre essa opção, que foi introduzida no MSBuild 3.5, confira Referências de linha de comando.

O exemplo a seguir instrui o MSBuild a usar três processos de trabalho. Se você usar essa configuração, o MSBuild pode compilar três projetos ao mesmo tempo.

msbuild.exe myproj.proj -maxcpucount:3

Parâmetro de tarefa BuildInParallel

BuildInParallel é um parâmetro booliano opcional em uma tarefa do MSBuild. Quando BuildInParallel é definido como true (seu valor padrão é true), vários processos de trabalho são gerados para compilar tantos projetos quanto possível ao mesmo tempo. Para que isso funcione corretamente, a opção -maxcpucount deve ser definida com um valor maior que 1.

A criação em paralelo só funciona para uma única invocação da tarefa MSBuild, portanto, se você invocar o envio em lote de tarefas, o paralelismo será limitado a cada lote. Confira Envio em lote do MSBuild.

O exemplo a seguir mostra como criar um destino em um arquivo de projeto com vários valores de propriedade diferentes em paralelo usando o parâmetro BuildInParallel.

Veja o arquivo de projeto do_it.proj com um destino que imprime uma mensagem diferente para cada arquivo SourceValue:

<Project>
   <Target Name="DoIt">
      <Message Text="For this invocation SourceValue='$(SourceValue)'" Importance="High" />
   </Target>
</Project>

O projeto a seguir cria um destino DoItespecificado no do_it.proj em paralelo, usando a lista de itens e os metadados AdditionalProperties para especificar valores diferentes da propriedade SourceValue.

<Project>
   <ItemGroup>
      <_Project Include="do_it.proj" AdditionalProperties="SourceValue=Test1" />
      <_Project Include="do_it.proj" AdditionalProperties="SourceValue=Test2" />
      <_Project Include="do_it.proj" AdditionalProperties="SourceValue=Test3" />
      <_Project Include="do_it.proj" AdditionalProperties="SourceValue=Test4" />
   </ItemGroup>
   <Target Name="Build">
      <MSBuild Projects="@(_Project)" Targets="DoIt" BuildInParallel="true" />
   </Target>
</Project>