MSBuild는 각 프로세서에 대해 별도의 빌드 프로세스를 만들어 여러 프로세서 또는 다중 코어 프로세서가 있는 시스템을 최대한 활용할 수 있습니다. 예를 들어 시스템에 4개의 프로세서가 있는 경우 MSBuild는 4개의 빌드 프로세스를 만듭니다.
MSBuild는 여러 빌드를 동시에 처리하여 전체 빌드 시간을 줄일 수 있습니다. 그러나 병렬 빌드는 빌드 프로세스의 발생 방식에 변화를 도입할 수 있습니다.
이 문서에서는 여러 빌드가 동시에 실행되면 발생할 수 있는 프로세스 변경 내용을 설명합니다.
프로젝트 간 참조
프로젝트에 대한 병렬 빌드 중에 Microsoft Build Engine에서 프로젝트 참조(ProjectReference
요소)를 발견하면 한 번만 참조를 빌드합니다. 두 프로젝트에 동일한 프로젝트 참조가 있는 경우 각 프로젝트에 대해 참조가 다시 작성되지 않습니다. 대신 빌드 엔진은 종속성이 있는 두 프로젝트에 대해 동일한 프로젝트 참조를 반환합니다. 또한 MSBuild는 동일한 대상에 대한 세션의 향후 요청에 동일한 프로젝트 참조를 제공합니다.
주기 탐지
병렬 빌드 중 주기 검색은 MSBuild 2.0과 동일한 동작입니다. 한 가지 차이점은 최신 버전의 MSBuild가 다른 시간 또는 빌드에서 주기의 검색을 보고할 수 있다는 것입니다.
병렬 빌드 중 오류 및 예외
병렬 빌드 중에 오류 및 예외가 비병렬 빌드 중일 때와 다른 시간에 발생할 수 있습니다. 또한 한 프로젝트가 빌드되지 않으면 다른 프로젝트 빌드가 계속됩니다.
MSBuild는 실패한 빌드와 동시에 프로젝트 빌드를 중지하지 않습니다. 다른 프로젝트는 성공하거나 실패할 때까지 계속 빌드됩니다. ContinueOnError 설정을 사용하도록 설정하면 오류가 발생하더라도 빌드가 중지되지 않습니다.
C++ 프로젝트(.vcxproj) 및 솔루션(.sln) 파일
C++ 프로젝트(.vcxproj) 및 솔루션(.sln) 파일을 MSBuild 작업에 전달할 수 있습니다.
- C++ 프로젝트: VCWrapperProject API가 호출된 다음 내부 MSBuild 프로젝트가 만들어집니다.
- C++ 솔루션: SolutionWrapperProject 인스턴스가 만들어지고 내부 MSBuild 프로젝트가 만들어집니다.
두 경우 모두 결과 프로젝트는 다른 MSBuild 프로젝트처럼 처리됩니다.
다중 프로세스 실행
거의 모든 빌드 관련 작업을 수행하려면 현재 디렉터리가 빌드 프로세스 전체에서 일정하게 유지되어 경로 관련 오류를 방지해야 합니다. 프로젝트는 여러 디렉터리를 만들 수 있으므로 MSBuild의 다른 스레드에서 실행할 수 없습니다.
이 문제를 방지하지만 다중 프로세서 빌드를 사용하도록 설정하기 위해 MSBuild는 프로세스 격리를 사용합니다. 이 프로세스를 통해 MSBuild는 시스템에서 사용할 수 있는 n
프로세서 수 n
와 동일한 최대 프로세스를 만들 수 있습니다. 예를 들어 MSBuild가 두 개의 프로세서가 있는 시스템에서 솔루션을 빌드하는 경우 두 개의 빌드 프로세스만 생성됩니다. 이러한 프로세스는 솔루션의 모든 프로젝트를 빌드하는 데 다시 사용됩니다.