MSBuild と並行して複数のプロジェクトをビルドする

複数のプロジェクトをより迅速にビルドするには、MSBuild を使用してビルドを並列で実行できます。 これを行うには、マルチコアまたは複数のプロセッサ コンピューターで次の設定を使用します。

  • コマンド プロンプトで MSBuild を実行するときに、 -maxcpucount スイッチを設定します。

  • BuildInParallel タスク パラメーターを MSBuild タスクでtrueするように設定します。

-verbosity (-v) スイッチを使用してビルド ログ情報の冗長性を詳細または診断に設定する場合、ビルドのパフォーマンスが低下する可能性があります。 このスイッチは、多くの場合、トラブルシューティングに使用されます。 詳細については、「MSBuild と MSBuild コマンド ライン リファレンスを使用してビルド ログを取得する」を参照してください。

-maxcpucount MSBuild スイッチ

-maxcpucount (-m) スイッチを使用する場合、MSBuild は、並列で実行できる指定された数の MSBuild.exe プロセスを作成します。 これらのプロセスはワーカー プロセスとも呼ばれます。 各ワーカー プロセスは、別のコアまたはプロセッサ (使用可能な場合) を使用して、他の使用可能なプロセッサが他のプロジェクトをビルドする場合と同時にプロジェクトをビルドします。 たとえば、このスイッチを 4 の値に設定すると、MSBuild はプロジェクトをビルドする 4 つのワーカー プロセスを作成します。

値を指定せずに -maxcpucount スイッチを含める場合、MSBuild はコンピューター上のプロセッサの数まで使用します。

このスイッチの詳細については、 MSBuild コマンド ライン リファレンスを参照してください

次の例では、3 つのワーカー プロセスを使用するように MSBuild に指示します。 この構成により、MSBuild は 3 つのプロジェクトを同時にビルドできます。

msbuild.exe myproj.proj -maxcpucount:3

BuildInParallel MSBuild タスク パラメーター

BuildInParallel は、MSBuild タスクで設定できる省略可能なブール型パラメーターです。 BuildInParalleltrue (既定値) に設定すると、複数のワーカー プロセスが生成され、できるだけ多くのプロジェクトが同時にビルドされます。 このパラメーターを正しく機能させるには、 -maxcpucount スイッチを 1 より大きい値に設定します。

MSBuild を使用して並列ビルドする場合、MSBuild タスクの 1 回の呼び出しに対してのみ機能します。 したがって、タスクのバッチ処理を呼び出す場合、並列処理は各バッチに制限されます。 詳細については、「 MSBuild のバッチ処理」を参照してください。

次の例では、 BuildInParallel パラメーターを使用して、複数の異なるプロパティ値を並列で持つプロジェクト ファイルにターゲットをビルドする方法を示します。

この例では、プロジェクト ファイル do_it.proj には、 SourceValueごとに異なるメッセージを出力するターゲットがあります。

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

次のプロジェクトは、do_it.proj という名前のプロジェクトに指定されたターゲット DoIt を並列でビルドします。このプロジェクトでは、項目リストとAdditionalPropertiesメタデータを使用して、プロパティ 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>