Construir múltiplos projetos em paralelo com o MSBuild

Para construir múltiplos projetos mais rapidamente, podes usar o MSBuild para executar compilações em paralelo. Para tal, utilize as seguintes definições em computadores multi-core ou multiprocessadores:

  • Define o -maxcpucount switch quando executares o MSBuild num prompt de comandos.

  • Defina o BuildInParallel parâmetro da tarefa para true na sua tarefa do MSBuild.

Observação

O desempenho da sua compilação pode diminuir se utilizar a opção -verbosity (-v) para definir a verbosidade da informação do seu registo de compilação para detalhado ou diagnóstico. Este interruptor é frequentemente usado para resolução de problemas. Para mais informações, consulte Obter registos de compilação com o MSBuild e Referência da linha de comandos do MSBuild.

-maxcpucount opção do MSBuild

Se usar o -maxcpucount switch (-m), o MSBuild cria o número especificado de processos deMSBuild.exe que podem ser executados em paralelo. Estes processos também são conhecidos como processos de trabalhadores. Cada "worker process" utiliza um processador separado, se houver algum disponível, para construir um projeto, enquanto outros processadores disponíveis podem estar a construir outros projetos. Por exemplo, definir este interruptor para um valor de 4 faz com que o MSBuild crie quatro processos de trabalho para construir o projeto.

Se incluir o -maxcpucount switch sem especificar um valor, o MSBuild usa até ao número de processadores do computador.

Para mais informações sobre esta mudança, consulte a referência de linha de comandos do MSBuild.

O exemplo seguinte instrui a MSBuild a usar três processos de trabalho. Com esta configuração, o MSBuild pode construir três projetos ao mesmo tempo.

msbuild.exe myproj.proj -maxcpucount:3

Parâmetro de tarefa BuildInParallel MSBuild

BuildInParallel é um parâmetro booleano opcional que podes definir na tua tarefa do MSBuild. Quando defines BuildInParallel para true (valor padrão), são gerados vários processos de trabalhadores para construir o maior número possível de projetos ao mesmo tempo. Para que este parâmetro funcione corretamente, defina o -maxcpucount interruptor para um valor superior a um.

Quando usas o MSBuild para construir em paralelo, só funciona para uma única invocação da tarefa do MSBuild. Portanto, se invocar o agrupamento de tarefas, o paralelismo está limitado a cada lote. Para mais informações, consulte MSBuild batching.

Os exemplos seguintes mostram como construir um alvo num ficheiro de projeto com múltiplos valores de propriedade diferentes em paralelo, usando o BuildInParallel parâmetro.

Neste exemplo, o ficheiro do_it.proj do projeto tem um alvo que imprime uma mensagem diferente para cada SourceValue.

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

O projeto seguinte constrói um DoIt alvo especificado num projeto chamado do_it.proj em paralelo, usando a lista de itens e AdditionalProperties os metadados para especificar diferentes valores 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>