在msbuild文件上执行导入时,InitialTargets是如何链接的?

时间:2016-07-22 08:10:22

标签: msbuild

当我有一个msbuild文件foo.csproj并且我想Import一个共享的proj / targets文件时,Project.InitialTargets属性是怎样的?假设(即正式)表现?

我在测试MSBUILD 2.0和4.x时看到的是,给出以下内容:

<Project InitialTargets="TestMain" ...>
  ...
  <Import Project="Sub.targets"/>
  ...
  <Target Name="TestMain">
    <Message Text="Hello from Main" />
  </Target>

<Project InitialTargets="TestSubInit" ...>
  ...
  <Target Name="TestSubInit">
    <Message Text="Hello from sub.targets" />
  </Target>

然后InitalTargets按包含顺序链接,即首先输出为:

TestMain-Target:
    Hello from Main
TestSubInit-Target:
    Hello from sub.targets

我想依靠这种链接行为 - 这是以某种方式记录的吗?

1 个答案:

答案 0 :(得分:1)

<Project>元素的MSDN页面上记录了InitialTargets属性的链接行为。

从文档中:

  

如果多个导入的文件定义了InitialTargets,则所有目标   提到的将按遇到导入的顺序运行。

因此,您看到的订购似乎已记录在案。


此外,Import element状态的文档:

  

如果导入的项目没有DefaultTargets属性,   导入的项目按照导入的顺序进行检查,   ……例如,如果 ProjectA导入 ProjectB和ProjectC(在   订单),然后ProjectB导入ProjectD,MSBuild 第一眼   在ProjectA上依次,然后在ProjectB ,然后在ProjectD上指定DefaultTargets,   最后是ProjectC。

虽然讨论了DefaultTargets属性,但这提示*Targets属性从“ main /” importing”项目开始就按顺序进行处理,因此

  

...按照遇到导入的顺序

然后将意味着“主”文件仅位于“导入”列表的开头。 (观察到的是什么。)