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>
但是,我會建議只需插入一個新的目標到現有的項目。
與什麼並行構建?你的管道是順序的而不是平行的。 MS Build將執行BuildDotNETSolutions,然後執行CheckinSubSystemDos然後CoreBuildCheckinSubSystem。你將需要提供一個更具體的例子,讓某人能夠回答你的問題。 –