Compilare più progetti in parallelo con MSBuild

Per compilare più progetti più velocemente, è possibile usare MSBuild per eseguire compilazioni in parallelo. A tale scopo, usare le impostazioni seguenti in computer multicore o più processori:

  • Impostare l'opzione -maxcpucount quando si esegue MSBuild alla riga di comando.

  • Impostare il parametro dell'attività su BuildInParallel per l'attività true MSBuild.

Annotazioni

Le prestazioni della compilazione potrebbero diminuire se si usa l'opzione -verbosity (-v) per impostare le informazioni dettagliate o diagnostiche del log di compilazione. Questa opzione viene spesso usata per la risoluzione dei problemi. Per ulteriori informazioni, consultare Ottenere i log di compilazione con MSBuild e Riferimento alla riga di comando di MSBuild.

-maxcpucount OPZIONE MSBuild

Se si usa l'opzione -maxcpucount (-m), MSBuild crea il numero specificato di processiMSBuild.exe che possono essere eseguiti in parallelo. Questi processi sono noti anche come processi di lavoro. Ogni processo di lavoro utilizza un core o un processore separato, se disponibile, per compilare un progetto mentre altri processori disponibili possono compilare contemporaneamente altri progetti. Ad esempio, l'impostazione di questa opzione su un valore di 4 fa sì che MSBuild crei quattro processi di lavoro per compilare il progetto.

Se si include l'opzione -maxcpucount senza specificare un valore, MSBuild usa fino al numero di processori nel computer.

Per ulteriori informazioni su questo switch, vedere il riferimento della riga di comando di MSBuild.

L'esempio seguente indica a MSBuild di usare tre processi di lavoro. Con questa configurazione, MSBuild può compilare tre progetti contemporaneamente.

msbuild.exe myproj.proj -maxcpucount:3

Parametro dell'attività BuildInParallel MSBuild

BuildInParallel è un parametro booleano facoltativo che è possibile impostare nell'attività MSBuild. Quando si imposta BuildInParallel su true (valore predefinito), vengono generati più processi paralleli per compilare il maggior numero possibile di progetti simultaneamente. Per il corretto funzionamento di questo parametro, impostare l'opzione -maxcpucount su un valore maggiore di uno.

Quando si usa MSBuild per la compilazione in parallelo, funziona solo per una singola chiamata dell'attività MSBuild. Pertanto, se si richiama l'invio in batch di attività, il parallelismo è limitato a ogni batch. Per altre informazioni, vedere Batch di MSBuild.

Negli esempi seguenti viene illustrato come compilare una destinazione in un file di progetto con più valori di proprietà diversi in parallelo usando il BuildInParallel parametro .

In questo esempio, il file di progetto do_it.proj ha una destinazione che stampa un messaggio diverso per ciascun SourceValue.

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

Il progetto seguente crea un obiettivo specificato DoIt in un progetto denominato do_it.proj in parallelo, utilizzando l'elenco di elementi e i metadati AdditionalProperties per specificare diversi valori 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>