MSBuild脚本dependsOnTargets的执行顺序

3

我在我的构建脚本中有这样一行代码

<Target Name="Deploy" DependsOnTargets="ServicesInstall;SitesTransfer" >

我想知道在这个例子中,目标将按什么顺序执行。此外,如果ServiceInstall有依赖关系,它们会在SiteTransfer之前还是之后执行?换句话说,执行是按深度优先还是广度优先方式进行的?
谢谢,
Sachin
1个回答

4

作为一个实验,我尝试了这个:

<Target Name="Deploy" DependsOnTargets="ServicesInstall;SitesTransfer" />
<Target Name="ServicesInstall" DependsOnTargets="ServicesInstallDependency">
   <Message Text="ServicesInstall" />
</Target>
<Target Name="ServicesInstallDependency">
   <Message Text="ServicesInstallDependency" />
</Target>
<Target Name="SitesTransfer">
   <Message Text="SitesTransfer" />
</Target>

以下是输出结果:

...
1>ServicesInstallDependency:
1>  ServicesInstallDependency
1>ServicesInstall:
1>  ServicesInstall
1>SitesTransfer:
1>  SitesTransfer
...

然而,我怀疑确切的顺序是未定义的。在msdn上没有记录。

换句话说,MSBuild仅保证满足您指定的约束条件。如果您需要确保在执行ServicesInstall之前执行SitesTransfer及其依赖项,则应使ServicesInstall依赖于SitesTransfer


7
根据http://msdn.microsoft.com/en-us/library/t50z2hka.aspx中的说明:“MSBuild引擎按照DependsOnTargets属性中出现的顺序,从左到右执行依赖项。” - Cheran Shunmugavel
您还可以在http://msdn.microsoft.com/en-us/library/ms171462.aspx的“目标生成顺序”标题下查看有用的执行顺序。 - ExecutionOrder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接