2015-05-14 29 views
0

我有一個目標,將建立然後檢查程序集。如何僅製作一個目標BuildInParallel?

<Target Name="CoreBuildCheckinSubSystem" DependsOnTargets="BuildDotNETSolutions;CheckinSubSystemDos"> 


</Target> 

在此builddotnetSolution將按順序構建解決方案列表。所以我不希望它buildinParallel,但CheckinSubsystemDos將檢查所有的DLL。如果簽入進程正在並行進行,這將爲我節省時間。

如何使CheckInSubSystemDos獨自在BuildInParallel中?

+0

與什麼並行構建?你的管道是順序的而不是平行的。 MS Build將執行BuildDotNETSolutions,然後執行CheckinSubSystemDos然後CoreBuildCheckinSubSystem。你將需要提供一個更具體的例子,讓某人能夠回答你的問題。 –

回答

0

MSBuild需要注意的一件重要事情是並行化是在項目級完成的。同一個項目中的目標總是按順序執行,而兩個不同的項目可能(或不可能)並行執行。換句話說,如果你想讓MSBuild同時執行一些東西,你必須創建多個項目並在同一個<MSBuild>任務中調用它們。

就你而言,代碼看起來像這樣。你的項目或解決方案列表來構建:

<ItemGroup> 
    <MyProjects Include="One.proj"/> 
    <MyProjects Include="Two.proj"/> 
    <MyProjects Include="Three.proj"/> 
</ItemGroup> 

構建目標將調用<MSBuild>目標順序:

<Target Name="BuildDotNETSolutions" ...> 
    <MSBuild Projects="@(MyProjects)" Targets="Build" BuildInParallel="false" /> 
</Target> 

你簽入目標將調用了在同一項目中定義的另一個目標 - 叫它MyCheckin

<Target Name="CoreBuildCheckinSubSystem" DependsOnTargets="BuildDotNETSolutions;CheckinSubSystemDos"> 
    <MSBuild Projects="@(MyProjects)" Targets="MyCheckin" BuildInParallel="true" /> 
</Target> 

你的另一個選擇是創建一個兄弟組項目 - 稱之爲MyCheckinProjects並使用它們在你登記的目標:

<ItemGroup> 
    <MyCheckinProjects Include="Checkin_One.proj"/> 
    <MyCheckinProjects Include="Checkin_Two.proj"/> 
    <MyCheckinProjects Include="Checkin_Three.proj"/> 
</ItemGroup> 

但是,我會建議只需插入一個新的目標到現有的項目。

相關問題