MSBuild를 사용하여 병렬로 여러 프로젝트 빌드

다중 프로젝트를 빌드하기 위해 MSBuild를 사용하여 병렬로 실행하면 더 빠를 수 있습니다. 빌드를 병렬로 실행하려면 다중 코어 또는 다중 프로세서 컴퓨터에서 다음 설정을 사용합니다.

  • 명령 프롬프트에서 -maxcpucount 스위치.

  • MSBuild 작업에서 BuildInParallel 작업 매개 변수.

참고 항목

명령줄의 verbosity(-v) 스위치는 빌드 성능에 영향을 줄 수도 있습니다. 빌드 로그 정보의 자세한 정도는 문제 해결을 위해 사용되는 자세히 또는 진단으로 설정되어 있는 경우 빌드 성능이 저하될 수 있습니다. 자세한 내용은 빌드 로그 가져오기명령줄 참조를 참조하세요.

-maxcpucount 스위치

시간을 줄이기 위해 -maxcpucount 스위치 또는 -m을 사용하는 경우 MSBuild는 병렬로 실행될 수 있는 MSBuild.exe 프로세스를 지정된 수만큼 생성할 수 있습니다. 이러한 프로세스를 “작업자 프로세스”라고도 합니다. 각 작업자 프로세스는 사용 가능한 다른 프로세스가 다른 프로젝트를 빌드할 때 동시에 별도의 코어 또는 프로세서(사용 가능한 경우)를 사용하여 프로젝트를 빌드합니다. 예를 들어, 해당 스위치의 값을 "4"로 설정하면 MSBuild에서 4개의 작업자 프로세스를 만들어 프로젝트를 빌드할 수 있습니다.

값을 지정하지 않고 -maxcpucount 스위치를 포함하는 경우, MSBuild는 컴퓨터의 최대 프로세서 수만큼 사용합니다.

MSBuild 3.5에 소개된 이 스위치에 대한 자세한 내용은 명령줄 참조를 참조하세요.

다음 예제에서는 세 개의 작업자 프로세스를 사용하도록 MSBuild에 지시합니다. 이 구성을 사용하면 MSBuild는 동시에 세 개의 프로젝트를 빌드할 수 있습니다.

msbuild.exe myproj.proj -maxcpucount:3

BuildInParallel 작업 매개 변수

BuildInParallel은 MSBuild 작업에 대한 선택적 부울 매개 변수입니다. BuildInParalleltrue(기본값은 true)로 설정하면 가능한 많은 프로젝트를 동시에 빌드하기 위해 여러 작업자 프로세스가 생성됩니다. 올바르게 작동하려면 -maxcpucount 스위치를 1보다 큰 값으로 설정해야 합니다.

병렬 빌드는 MSBuild 작업의 단일 호출에 대해서만 작동하므로 태스크 일괄 처리를 호출하는 경우 병렬 처리가 각 일괄 처리로 제한됩니다. MSBuild 일괄 처리를 참조하세요.

다음 예제에서는 BuildInParallel 매개 변수를 사용하여 여러 다른 속성 값을 병렬로 사용하여 프로젝트 파일에서 대상을 빌드하는 방법을 보여줍니다.

다음은 각 SourceValue에 대해 다른 메시지를 출력하는 대상이 있는 프로젝트 파일 do_it.proj입니다.

<Project>
   <Target Name="DoIt">
      <Message Text="For this invocation SourceValue='$(SourceValue)'" Importance="High" />
   </Target>
</Project>

다음 프로젝트는 항목 목록 및 AdditionalProperties 메타데이터를 사용하여 속성 SourceValue의 다른 값을 지정하여 do_it.proj의 지정 대상 DoIt를 병렬로 빌드합니다.

<Project>
   <ItemGroup>
      <_Project Include="do_it.proj" AdditionalProperties="SourceValue=Test1" />
      <_Project Include="do_it.proj" AdditionalProperties="SourceValue=Test2" />
      <_Project Include="do_it.proj" AdditionalProperties="SourceValue=Test3" />
      <_Project Include="do_it.proj" AdditionalProperties="SourceValue=Test4" />
   </ItemGroup>
   <Target Name="Build">
      <MSBuild Projects="@(_Project)" Targets="DoIt" BuildInParallel="true" />
   </Target>
</Project>