说明评估顺序的示例
MSBuild 在 Target 元素之前评估 PropertyGroup,Choose 和 ItemGroup 元素,这些元素直接位于 Project 元素之下。
- 直接在
Project元素下,PropertyGroup和Choose元素按照它们出现的顺序进行评估,然后按照它们出现的顺序评估ItemGroup元素。 - 在
Target元素中,PropertyGroup和ItemGroup具有相同的优先级,并按照它们出现的顺序进行评估。
在通过 Import 引用的文件中,MSBuild 以与上面相同的方式评估 PropertyGroup,Choose 和 ItemGroup,并且好像导入文件的内容出现在 Import 所在的内联中。
下面的注释提供了 MSBuild 评估选定行之前和之后的属性值和项目计数。
<Project DefaultTargets="FooTarget" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="FooTarget">
<ItemGroup>
<!-- '$(FooProp)' == '2', '@(FooItem->Count())' == '1' -->
<FooItem Include="foo value B" />
<!-- '$(FooProp)' == '2', '@(FooItem->Count())' == '2' -->
</ItemGroup>
<PropertyGroup>
<!-- '$(FooProp)' == '2', '@(FooItem->Count())' == '2' -->
<FooProp>3</FooProp>
<!-- '$(FooProp)' == '3', '@(FooItem->Count())' == '2' -->
</PropertyGroup>
</Target>
<ItemGroup>
<!-- '$(FooProp)' == '2', '@(FooItem->Count())' == '0' -->
<FooItem Include="foo value A" />
<!-- '$(FooProp)' == '2', '@(FooItem->Count())' == '1' -->
</ItemGroup>
<PropertyGroup>
<!-- '$(FooProp)' == '', '@(FooItem->Count())' == '0' -->
<FooProp>1</FooProp>
<!-- '$(FooProp)' == '1', '@(FooItem->Count())' == '0' -->
</PropertyGroup>
<Choose>
<When Condition=" '$(FooProp)' == '1' ">
<!-- '$(FooProp)' == '1', '@(FooItem->Count())' == '0' -->
<FooProp>2</FooProp>
<!-- '$(FooProp)' == '2', '@(FooItem->Count())' == '0' -->
</When>
</Choose>
</Project>