다중 프로세서를 사용하여 프로젝트 빌드
MSBuild 에서는 다중 프로세서나 다중 핵심 프로세서가 있는 시스템을 사용할 수 있습니다. 사용 가능한 각 프로세서에 대해서는 별도의 빌드 프로세스가 만들어집니다. 예를 들어 시스템에 네 개의 프로세서가 있으면 네 개의 빌드 프로세스가 만들어집니다. MSBuild 는 이러한 빌드를 동시에 처리할 수 있고 따라서 전체 빌드 시간이 감소 합니다. 그러나 병렬 빌드에서 빌드 프로세스가 발생 하는 방법에 몇 가지 변경 사항을 소개 합니다. 이 항목에서는 이러한 변경 사항에 대해 설명합니다.
프로젝트 간 참조
Microsoft Build Engine에서 병렬 빌드를 사용하여 프로젝트를 빌드할 때 P2P(프로젝트 간) 참조가 발생하면 참조가 한 번만 빌드됩니다. 두 개의 프로젝트에 동일한 P2P 참조가 있을 경우 각 프로젝트에 대해 참조가 다시 빌드되지 않습니다. 대신 빌드 엔진이 이러한 참조를 사용하는 두 프로젝트에 동일한 P2P 참조를 반환합니다. 동일한 대상에 대한 세션의 후속 요청은 동일한 P2P 참조를 제공합니다.
주기 감지
주기 감지는 현재 MSBuild에서 다른 시간이나 빌드에서 주기 감지를 보고할 수 있다는 점을 제외하고 MSBuild 2.0과 동일하게 작동합니다.
병렬 빌드 시 발생하는 오류 및 예외
병렬 빌드에서는 병렬 빌드가 아닐 때와는 다른 시간에 오류 및 예외가 발생할 수 있으며, 한 프로젝트가 빌드되지 않아도 다른 프로젝트 빌드는 계속됩니다. MSBuild 는 하나가 실패한 병렬에서 빌드 중인 어떤 프로젝트 빌드도 멈추지 않습니다. 다른 프로젝트는 빌드가 성공 또는 실패할 때까지 계속 합니다. 그러나 ContinueOnError가 설정되어 있으면 오류가 발생해도 빌드가 중지되지 않습니다.
Visual C++ 프로젝트(.vcproj) 및 솔루션(.sln) 파일
Visual C++ 프로젝트(.vcproj) 및 솔루션(.sln) 파일은 둘 다 MSBuild 작업에 전달할 수 있습니다. Visual C++ 프로젝트의 경우 VCWrapperProject가 호출된 다음 내부 MSBuild 프로젝트가 만들어지고, Visual C++ 솔루션의 경우 SolutionWrapperProject가 만들어진 다음 내부 MSBuild 프로젝트가 만들어집니다. 두 경우 모두 결과 프로젝트는 다른 모든 MSBuild 프로젝트와 마찬가지로 처리됩니다.
다중 프로세스 실행
거의 모든 빌드 관련 작업에서는 경로 관련 오류를 방지하기 위해 빌드 과정 동안 현재 디렉터리를 일정하게 유지해야 합니다. 따라서 여러 디렉터리가 만들어질 수 있으므로 MSBuild의 여러 스레드에서 프로젝트를 실행할 수는 없습니다.
다중 프로세서 빌드를 계속 사용하는 상태에서 이 문제를 방지하기 위해 MSBuild에서는 "프로세스 격리"를 사용합니다. 프로세스 격리를 사용하면 MSBuild에서 최대 n개의 프로세스를 만들 수 있습니다. 여기서 n은 시스템에서 사용할 수 있는 프로세서 수와 같습니다. 예를 들어, MSBuild에서 두 개의 프로세서가 있는 시스템의 솔루션을 빌드하면 두 개의 빌드 프로세스만 만들어집니다. 이러한 프로세스는 솔루션에 있는 모든 프로젝트를 빌드하는 데 다시 사용됩니다.