如何只制作一个目标BuildInParallel?

时间:2015-05-14 06:13:59

标签: msbuild

我有一个目标,它将构建然后签入程序集。

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


 </Target>

在此builddotnetSolution中将按顺序构建解决方案列表。所以我不希望它是buildinParallel,但CheckinSubsystemDos将检查所有的dll。如果签入过程是并行进行的,那么我可以节省时间。

如何在BuildInParallel中单独制作CheckinSubSystemDOS?

1 个答案:

答案 0 :(得分: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>

但我建议只是在现有项目中插入一个新目标。