MSBuild 3.5 には、マルチコア システムまたはマルチプロセッサ システムでのビルド パフォーマンスを最適化する方法として、次の 2 つの機能が用意されています。
コマンド ラインで /maxcpucount スイッチを使用します。
MSBuild タスクに対して BuildInParallel タスク パラメーターを使用します。
/maxcpucount スイッチ
/maxcpucount スイッチ (短縮形は /m) を使用すると、MSBuild 3.5 で指定された数の MSBuild.exe プロセスを作成し、同時に実行できます。これらのプロセスは "ワーカー プロセス" とも呼ばれます。 各ワーカー プロセスがそれぞれ別のコアまたはプロセッサを使用してプロジェクトをビルドするため、プロセッサごとに異なるプロジェクトを同時にビルドできます。 たとえば、/maxcpucount を "4" に設定すると、MSBuild は 4 つのワーカー プロセスを作成してプロジェクトをビルドします。
コマンド ラインでの /maxcpucount スイッチの使用例を次に示します。
C:\WINDOWS\Microsoft.NET\Framework\v3.5>msbuild.exe myproj.proj /maxcpucount:3
このように指定すると、MSBuild は 3 つのワーカー プロセスを使用してプロジェクトをビルドします。 この構成では、同時に 3 つのプロジェクトをビルドできます。 最適なビルド パフォーマンスを確保するには、/maxcpucount をシステムのプロセッサ数またはコア数と等しい値に設定します。
BuildInParallel タスク パラメーター
BuildInParallel は、MSBuild のタスクに対する省略可能なブール値パラメーターです。 BuildInParallel を true (既定値) に設定すると、複数のワーカー プロセスが生成され、それと同じ数のプロジェクトを同時にビルドすることができます。 このようなビルドを行うためには、/maxcpucount スイッチが 1 より大きい値に設定され、システムが最低でもデュアルコアであるか 2 つ以上のプロセッサを搭載している必要があります。
次の例は、microsoft.common.targets の一部であり、BuildInParallel パラメーターの設定方法を示しています。
<PropertyGroup>
<BuildInParallel Condition="'$(BuildInParallel)' ==
''">true</BuildInParallel>
</PropertyGroup>
<MSBuild
Projects="@(_MSBuildProjectReferenceExistent)"
Targets="GetTargetPath"
BuildInParallel="$(BuildInParallel)"
Properties="%(_MSBuildProjectReferenceExistent.SetConfiguration);
%(_MSBuildProjectReferenceExistent.SetPlatform)"
Condition="'@(NonVCProjectReference)'!='' and
('$(BuildingSolutionFile)' == 'true' or
'$(BuildingInsideVisualStudio)' == 'true' or
'$(BuildProjectReferences)' != 'true') and
'@(_MSBuildProjectReferenceExistent)' != ''"
ContinueOnError="!$(BuildingProject)">
<Output TaskParameter="TargetOutputs"
ItemName="_ResolvedProjectReferencePaths"/>
</MSBuild>