說明評估順序的示例

MSBuild 在 Target 元素之前評估 PropertyGroupChooseItemGroup 元素,這些元素直接位於 Project 元素之下。

  • 直接在 Project 元素下,PropertyGroupChoose 元素按照它們出現的順序進行評估,然後按照它們出現的順序評估 ItemGroup 元素。
  • Target 元素中,PropertyGroupItemGroup 具有相同的優先順序,並按照它們出現的順序進行評估。

在通過 Import 引用的檔案中,MSBuild 以與上面相同的方式評估 PropertyGroupChooseItemGroup,並且好像匯入檔案的內容出現在 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>