Compilare più progetti in parallelo con MSBuild

È possibile utilizzare MSBuild per compilare più progetti più velocemente eseguendoli in parallelo. Per eseguire compilazioni in parallelo, è possibile utilizzare le impostazioni seguenti in un computer multicore o con più processori:

  • L'opzione -maxcpucount a un prompt dei comandi.

  • Il parametro dell'attività BuildInParallel in un attività MSBuild.

Nota

L'opzione -verbosity (-v) in una riga di comando può incidere sulle prestazioni di compilazione, che possono diminuire se il livello di dettaglio delle informazioni del log di compilazione è impostato su dettagliato o diagnostico, utilizzati per la risoluzione dei problemi. Per altre informazioni, vedere Recuperare log di compilazione e Riferimenti alla riga di comando.

Opzione -maxcpucount

Se si usa l'opzione -maxcpucount o l'abbreviazione -m, tramite MSBuild è possibile creare il numero specificato di processi MSBuild.exe eseguibili in parallelo. Questi processi sono noti anche come "processi di lavoro". Ogni processo di lavoro usa un core o un processore separato, se disponibile, per compilare un progetto contemporaneamente ad altri processori disponibili. Ad esempio, se si imposta questa opzione su un valore pari a "4", in MSBuild verranno creati quattro processi di lavoro per compilare il progetto.

Se si include l'opzione -maxcpucount senza specificare un valore, in MSBuild verranno utilizzati fino al numero massimo di processori presenti nel computer.

Per altre informazioni su questa opzione, introdotta in MSBuild 3.5, vedere Riferimenti alla riga di comando.

Nell'esempio seguente viene indicato a MSBuild di utilizzare tre processi di lavoro. Se si utilizza questa configurazione, tramite MSBuild sarà possibile compilare tre progetti contemporaneamente.

msbuild.exe myproj.proj -maxcpucount:3

Parametro dell'attività BuildInParallel

BuildInParallel è un parametro booleano facoltativo in un'attività MSBuild. Quando BuildInParallel è impostato su true (il valore predefinito è true), vengono generati più processi di lavoro per compilare contemporaneamente il maggior numero possibile di progetti. Per il corretto funzionamento, l'opzione -maxcpucount deve essere impostata su un valore maggiore di 1.

La compilazione in parallelo funziona solo per una singola chiamata dell'attività MSBuild, quindi se si richiama l'invio in batch di attività, il parallelismo è limitato a ogni batch. Vedere Invio in batch di MSBuild.

Nell'esempio seguente viene illustrato come compilare una destinazione in un file di progetto con più valori di proprietà diversi in parallelo usando il BuildInParallel parametro .

Ecco il file do_it.proj di progetto con una destinazione che stampa semplicemente un messaggio diverso per ogni SourceValue:

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

Il progetto seguente compila una destinazione DoIt specificata in do_it.proj parallelo, usando l'elenco di elementi e AdditionalProperties i metadati per specificare valori diversi della proprietà 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>