複数のプロセッサを使用したプロジェクトのビルドUsing Multiple Processors to Build Projects

MSBuild では、複数のプロセッサまたはマルチコア プロセッサを搭載したシステムを使用できます。MSBuild can take advantage of systems that have multiple processors, or multiple-core processors. プロセッサごとに個別のビルド プロセスが作成されます。A separate build process is created for each available processor. たとえば、4 つのプロセッサを搭載したシステムでは、4 つのビルド プロセスが作成されます。For example, if the system has four processors, then four build processes are created. MSBuildMSBuild では、これらのビルドを同時に処理できるため、全体的なビルド時間が短縮されます。 can process these builds simultaneously, and therefore overall build time is reduced. ただし、並行ビルドでは、ビルド処理が行われる方法がいくつかの点で通常とは異なります。However, parallel building introduces some changes in how build processes occur. このトピックでは、それらの相違点について説明します。This topic discusses those changes.

プロジェクト間参照Project to Project References

Microsoft Build EngineMicrosoft Build Engine が並行ビルドによってプロジェクトをビルドしているときにプロジェクト間 (P2P) 参照を検出した場合は、その参照を 1 回のみビルドします。When the Microsoft Build EngineMicrosoft Build Engine encounters a project-to-project (P2P) reference while it is using parallel builds to build a project, it builds the reference only one time. 2 つのプロジェクトに同じ P2P 参照がある場合、その参照はプロジェクトごとに再ビルドされません。If two projects have the same P2P reference, the reference is not rebuilt for each project. ビルド エンジンが同じ P2P 参照をそれに依存する両方のプロジェクトに返します。Instead, the build engine returns the same P2P reference to both projects that depend on it. それ以降にセッション内で同じターゲットが要求された場合は、同じ P2P 参照が返されます。Future requests in the session for the same target are provided the same P2P reference.

サイクルの検出Cycle Detection

サイクルの検出は MSBuildMSBuild 2.0 の場合と同じように機能します。ただし、MSBuildMSBuild には現在、サイクルの検出を別の時点またはビルド時に報告する機能が追加されています。Cycle detection functions the same as it did in MSBuildMSBuild 2.0, except that now MSBuildMSBuild can report the detection of the cycle at a different time or in the build.

並行ビルド中のエラーと例外Errors and Exceptions During Parallel Builds

並行ビルドでは、通常のビルドとは異なる時点でエラーや例外が発生することがあり、あるプロジェクトのビルドが失敗した場合でも他のプロジェクトのビルドは続行されます。In parallel builds, errors and exceptions can occur at different times than they do in a non-parallel build, and when one project does not build, the other project builds continue. MSBuildMSBuild では、同時に実行されているプロジェクトのビルドのいずれかが失敗しても、他のビルドが停止されることはありません。 will not stop any project build that is building in parallel with the one that failed. 他のプロジェクトのビルドは、成功または失敗するまで続行されます。Other projects continue to build until they either succeed or fail. ただし、ContinueOnError が有効である場合は、エラーが発生したビルドも停止しません。However, if ContinueOnError has been enabled, then no builds will stop even if an error occurs.

Visual C++ のプロジェクト ファイル (.vcproj) とソリューション ファイル (.sln)Visual C++ Project (.vcproj) and Solution (.sln) Files

Visual C++Visual C++ のプロジェクト ファイル (.vcproj) とソリューション ファイル (.sln) は、どちらも MSBuild タスクに渡すことができます。Both Visual C++Visual C++ projects (.vcproj) and solution (.sln) files can be passed to the MSBuild Task. Visual C++Visual C++ プロジェクトでは、VCWrapperProject が呼び出され、内部 MSBuildMSBuild プロジェクトが作成されます。For Visual C++Visual C++ projects, VCWrapperProject is called, and then the internal MSBuildMSBuild project is created. Visual C++Visual C++ ソリューションについては、SolutionWrapperProject が作成され、次に内部 MSBuildMSBuild プロジェクトが作成されます。For Visual C++Visual C++ solutions, a SolutionWrapperProject is created, and then the internal MSBuildMSBuild project is created. いずれの場合も、生成されるプロジェクトは他の MSBuildMSBuild プロジェクトと同じように扱われます。In both cases, the resulting project is treated the same as any other MSBuildMSBuild project.

マルチプロセス実行Multi-Process Execution

ビルドに関連するほとんどの操作では、パス関連のエラーを回避するために、ビルド プロセスの全体をとおして現在のディレクトリが変わらないことが必要です。Almost all build-related activities require the current directory to remain constant throughout the build process to prevent path-related errors. そのため、MSBuildMSBuild では、スレッドごとにディレクトリが作成される可能性があるため、複数のスレッドでプロジェクトを実行することはできません。Therefore, projects cannot run on different threads in MSBuildMSBuild because they would cause multiple directories to be created.

この問題を回避し、マルチプロセッサによるビルドを可能にするために、MSBuildMSBuild では "プロセス分離" が使用されます。To avoid this problem but still enable multi-processor builds, MSBuildMSBuild uses "process isolation." プロセス分離によって、MSBuildMSBuild は最大 n のプロセスを作成できます。n はシステムで利用可能なプロセッサの数です。By using process isolation, MSBuildMSBuild can create a maximum of n processes, where n equals the number of processors available on the system. たとえば、MSBuildMSBuild が 2 つのプロセッサを搭載したシステムでソリューションをビルドする場合は、2 つのビルド プロセスのみ作成されます。For example, if MSBuildMSBuild builds a solution on a system that has two processors, then only two build processes are created. これらのプロセスは、ソリューションに含まれるすべてのプロジェクトのビルドに再利用されます。These processes are re-used to build all the projects in the solution.

関連項目See Also

MSBuild での複数のプロジェクトの並行ビルド Building Multiple Projects in Parallel
タスクTasks