2014-06-20 8 views
2

빌드 과정에서 여러 exec 개의 작업을 일괄 처리합니다. 각 실행은 완료하는 데 약 1 분이 걸리기 때문에 전체 빌드 성능을 향상시키기 위해 이들을 병렬로 실행하고 싶습니다. 여러에게 exec 작업을 실행병렬로 여러 개의 임무 작업 실행

대상 :

<Target Name="CreatePackages" DependsOnTargets="Build" AfterTargets="Build"> 
    <Exec Command="SomeExecutable.exe %(SomeGroup.Location) </Exec> 
</Target> 

ItemGroup 정의 :

<ItemGroup> 
    <SomeGroup Include="Production"> 
    <Location>SomePath/Production</Location> 
    </SomeGroup> 
    <SomeGroup Include="Test"> 
    <Location>SomePath/Test</Location> 
    </SomeGroup> 
    <SomeGroup Include="Development"> 
    <Location>SomePath/Development</Location> 
    </SomeGroup> 
</ItemGroup> 

가 어떻게 병렬이 exec 작업을 실행합니까?

답변

1

MSBuild는 작업 수준이나 대상 수준에서는 병렬 처리되지 않지만 프로젝트 수준에서만 병렬 처리됩니다. TPL (System.Threading.Tasks.Parallel) 및 Microsoft.Build.Tasks.Exec 또는 System.Diagnostics.Process (쉬운)을 사용하여 사용자 지정 작업을 작성하거나 YieldDuringToolExecution (기술적으로는 병렬 처리가 아닌 다른 작업)을 사용하여 각 개별 위치를 대상에 배치하고 프로젝트 자체를 병렬로 호출 할 수 있습니다 작업은 더 적게 대기합니다).

+0

[대상을 병렬로 실행할 수 있습니다.] (http://mikefourie.wordpress.com/2012/02/29/executing-msbuild-targets-in-parallel-part-1/). 내가 어떻게 든 혼란스럽지 않으면! – davenewza

+0

@davenewza 일종의, 스크린 샷을 보면 3 가지 빌드 요약이 있습니다. 3 개의 평행 한 목표를 가진 프로젝트를 구축하는 것이 아니라 각각 하나의 목표와 병렬로 프로젝트를 세 번 구축했다고 말하는 것이 더 정확할 것이라고 생각합니다. 이는 첫 번째 옵션에서 의미했던 것입니다. TPL과 커스텀 작업으로 두 번째 작업을 수행하십시오. –

+1

@davenewza, 기술적으로 MSBuild는 프로젝트 수준에서만 병렬화됩니다 * only *. Extension Pack의 트릭은'msbuild MyProject.proj/t : OneOfMyTargets'를 호출하는 것과 비슷한 MSBuild.exe의 여러 인스턴스를 병렬로 실행한다는 것입니다. 이것은 MSBuild에서 기본적으로 지원되는 병렬화와 유사하지만 그렇지 않습니다. 그 이유는 타겟의 사전 요구 사항이 여러 번 실행되어 MSBuild 모델을 깨 버리기 때문입니다. MSBuild (프로젝트 수준에서)는 대상이 최대 한 번만 실행되도록합니다. 확장 팩에서 해당 기능을 사용하지 않는 것이 좋습니다. –