我有一个目标,它将构建然后签入程序集。
<Target Name="CoreBuildCheckinSubSystem" DependsOnTargets="BuildDotNETSolutions;CheckinSubSystemDos">
</Target>
在此builddotnetSolution中将按顺序构建解决方案列表。所以我不希望它是buildinParallel,但CheckinSubsystemDos将检查所有的dll。如果签入过程是并行进行的,那么我可以节省时间。
如何在BuildInParallel中单独制作CheckinSubSystemDOS?
答案 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>
但我建议只是在现有项目中插入一个新目标。