MSBuild での複数のプロジェクトの並行ビルド

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

  • コマンド プロンプトで /maxcpucount を切り替えます。

  • MSBuild タスクの BuildInParallel のタスク パラメーター。

[!メモ]

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

/maxcpucount スイッチ

短い形式のスイッチに /maxcpucount、または /m を使用する場合、MSBuild は並列実行される可能性の MSBuild.exe プロセスの指定した数を作成できます。これらのプロセスは "ワーカー プロセス" とも呼ばれます。各ワーカー プロセスがそれぞれ別のコアまたはプロセッサを使用してプロジェクトをビルドするため、プロセッサごとに異なるプロジェクトを同時にビルドできます。たとえば、"4" の値にこのスイッチを設定すると、MSBuild は、プロジェクトをビルドするには、4 種類のワーカー プロセスを作成します。

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

MSBuild 3.5 で導入されたこのスイッチについての詳細に MSBuild コマンド ライン リファレンス"を参照してください。

次の例では、3 種類のワーカー プロセスを使用するように MSBuild に命令します。この構成を使用する場合、MSBuild は 3 種類のプロジェクトを同時にビルドできます。

C:\WINDOWS\Microsoft.NET\Framework\v3.5>msbuild.exe myproj.proj /maxcpucount:3

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>

参照

概念

複数のプロセッサを使用したプロジェクトのビルド

マルチプロセッサ対応の logger の記述

その他の技術情報

(C++ ビルドの並列のブログ