說明評估順序的示例
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>