Ordre des biens et évaluation des articles

Pour plus de détails, voir [Property and Item Evaluation Order][1] sur la page de documentation MSDN Comparing Properties and Items.

[1] : https://msdn.microsoft.com/en-us/library/dd997067.aspx#Anchor_2

Exemple illustrant l’ordre d’évaluation

MSBuild évalue les éléments PropertyGroup, Choose et ItemGroup qui se trouvent directement sous l’élément Project avant ceux qui se trouvent dans les éléments Target.

  • Directement sous l’élément Project, les éléments PropertyGroup et Choose sont évalués dans l’ordre dans lequel ils apparaissent, puis les éléments ItemGroup sont évalués dans l’ordre dans lequel ils apparaissent.
  • Dans Target, les éléments PropertyGroup et ItemGroup partagent une priorité égale et sont évalués dans l’ordre dans lequel ils apparaissent.

Dans les fichiers référencés via Import, MSBuild évalue PropertyGroup, Choose et ItemGroup de la même manière que ci-dessus, et comme si le contenu des fichiers importés apparaissait en ligne là où se trouve Import.

Les commentaires ci-dessous fournissent les valeurs de propriété et le nombre d’éléments avant et après que MSBuild évalue les lignes sélectionnées.

<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>