这两种调用Msbuild的方式有哪些区别,哪种更快?

时间:2015-05-13 04:44:00

标签: msbuild

我有一个目标,我要再打2个目标。

  

选项1

<Target Name="CoreBuildSubSystem" DependsOnTargets="BuildDotNETSolutions;CopySubSystemDOs;">

 </Target>
  

选项2

<Target Name="CoreBuildSubSystem">
 <MSBuild Targets="BuildDotNETSolutions" BuildInParallel="false"></MSBuild>
    <MSBuild Targets="CopySubSystemDOs" BuildInParallel="true"></MSBuild>
</Target>

他们在做同样的活动吗?我想第二种方法更快,因为它允许BuildInParallel = True。我的理解是否正确?

1 个答案:

答案 0 :(得分:1)

这两种实现方式与 BuildDotNETSolutions CopySubSystemDOs 按顺序执行的效果完全相同。

坚持使用选项1,因为它遵循更好的MS Build实践,因为您在DependsOnTargets属性中声明目标的依赖关系,这使得构建引擎在声明输入和输出时决定目标是否过期。 选项1也更易于维护,因为属性和项目组可以自然访问,您不需要将它们作为MS Build元素的属性传递。

选项2目前不允许 BuildDotNETSolutions CopySubSystemDOs 并行构建。您需要按如下方式更改它以允许并行构建目标。 然而,这种方法会以递归方式构建项目,这将使跟随你的人诅咒你的名字。

<Target Name="CoreBuildSubSystem">
 <MSBuild Projects=$(MSBuildThisFileFullPath)
          Targets="BuildDotNETSolutions;CopySubSystemDOs" 
          BuildInParallel="true" />
</Target>