Ordre des biens et évaluation des articles
Sur cette page
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émentsPropertyGroup
etChoose
sont évalués dans l’ordre dans lequel ils apparaissent, puis les élémentsItemGroup
sont évalués dans l’ordre dans lequel ils apparaissent. - Dans
Target
, les élémentsPropertyGroup
etItemGroup
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>