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

在对msbuild文件执行导入时,InitialTargets是如何链接的?,msbuild,Msbuild,当我有一个msbuild文件foo.csproj并且我想导入一个共享的proj/目标文件时,属性应该(即正式)如何工作 我在测试MSBUILD 2.0和4.x时看到的是,考虑到以下情况: <Project InitialTargets="TestMain" ...> ... <Import Project="Sub.targets"/> ... <Target Name="TestMain"> <Message Text="Hel

当我有一个msbuild文件
foo.csproj
并且我想
导入一个共享的
proj
/
目标文件
时,属性应该(即正式)如何工作

我在测试MSBUILD 2.0和4.x时看到的是,考虑到以下情况:

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

我想依赖此链接行为-是否以某种方式记录了此行为?

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

从文件中:

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

因此,您看到的排序似乎是有文档记录的


此外,该州的文件:

如果导入的项目没有
DefaultTargets
属性, 进口项目按进口顺序进行检验, ... . 例如,如果ProjectA导入了ProjectB和ProjectC(在该 订单)和ProjectB导入ProjectD,MSBuild首先查找 在ProjectA、ProjectB、ProjectD上指定的默认目标, 最后是ProjectC

虽然这里讨论的是
DefaultTargets
属性,但它暗示
*Targets
属性从“main/”importing”项目开始按顺序处理,因此

…按照遇到导入的顺序

这意味着“main”文件只是放在“imports”列表的开头(这就是所观察到的)

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