When, élément (MSBuild)
Spécifie un bloc de code que l’élément Choose
peut sélectionner.
<Projet><Choisir><Quand><Choisir> ... <Autrement><Choisir> ...
Syntaxe
<When Condition="'StringA'=='StringB'">
<PropertyGroup>... </PropertyGroup>
<ItemGroup>... </ItemGroup>
<Choose>... </Choose>
</When>
Attributs et éléments
Les sections suivantes décrivent des attributs, des éléments enfants et des éléments parents.
Attributs
Attribut | Description |
---|---|
Condition | Attribut requis. Condition à évaluer. Pour plus d’informations, consultez l’article Conditions (Conditions MSBuild). |
Éléments enfants
Élément | Description |
---|---|
Choose | Élément facultatif. Évalue les éléments enfants pour sélectionner une section de code à exécuter. Un élément Choose peut ne contenir aucun élément When ou en contenir plusieurs. |
ItemGroup | Élément facultatif. Contient un ensemble d’éléments Item définis par l’utilisateur. Un élément ItemGroup peut ne contenir aucun élément When ou en contenir plusieurs. |
PropertyGroup | Élément facultatif. Contient un ensemble d’éléments Property définis par l’utilisateur. Un élément PropertyGroup peut ne contenir aucun élément When ou en contenir plusieurs. |
Éléments parents
Élément | Description |
---|---|
Choose, élément (MSBuild) | Évalue les éléments enfants pour sélectionner une section de code à exécuter. |
Remarques
Si l’attribut Condition
s’évalue à true, les éléments ItemGroup
et PropertyGroup
enfants de l’élément When
sont exécutés et tous les éléments When
suivants sont ignorés.
Les éléments Choose
, When
et Otherwise
sont utilisés ensemble pour permettre la sélection d’une section de code spécifique à exécuter parmi plusieurs options possibles. Pour plus d’informations, consultez Constructions conditionnelles.
Exemple
Le projet suivant utilise l’élément Choose
pour sélectionner l’ensemble de valeurs de propriété à définir dans les éléments When
. Si les attributs Condition
des deux éléments When
s’évaluent à false
, les valeurs des propriétés dans l’élément Otherwise
sont définies. Lors de l’exécution de l’exemple, essayez de transmettre différents paramètres de propriété à partir de la ligne de commande, par exemple msbuild myproj.proj -p:Configuration=Test;Platform=x86
, et voyez à quoi ressemble le chemin de sortie. L’exemple suppose que l’exigence consiste à définir certaines propriétés pour les builds de débogage et de mise en production, notamment le dossier de sortie basé sur le nombre de bits de la plateforme plutôt que sur le nom réel de la plateforme, et également prendre en charge les configurations « Test » et « Vente au détail », mais traiter « Vente au détail » comme « Publication ».
<Project>
<PropertyGroup>
<Configuration Condition="$(Configuration) == ''">Debug</Configuration>
<Platform Condition="$(Platform) == ''">x64</Platform>
</PropertyGroup>
<Choose>
<When Condition="$(Configuration)=='Test'">
<PropertyGroup>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<DefineConstants>DEBUG;TRACE</DefineConstants>
</PropertyGroup>
<Choose>
<When Condition="$(Platform)=='x86' Or $(Platform) == 'ARM32'">
<PropertyGroup>
<OutputPath>.\bin\Test\32-bit\</OutputPath>
</PropertyGroup>
</When>
<When Condition="$(Platform)=='x64' Or $(Platform) == 'ARM64'">
<PropertyGroup>
<OutputPath>.\bin\Test\64-bit\</OutputPath>
</PropertyGroup>
</When>
<!-- For any other platform, use the platform name -->
<Otherwise>
<PropertyGroup>
<OutputPath>.\bin\Test\$(Platform)\</OutputPath>
</PropertyGroup>
</Otherwise>
</Choose>
</When>
<When Condition="$(Configuration)=='Retail' Or $(Configuration)=='Release'">
<PropertyGroup>
<DebugSymbols>false</DebugSymbols>
<Optimize>true</Optimize>
<DefineConstants>TRACE</DefineConstants>
</PropertyGroup>
<Choose>
<When Condition="$(Platform)=='x86' Or $(Platform) == 'ARM32'">
<PropertyGroup>
<OutputPath>.\bin\Release\32-bit\</OutputPath>
</PropertyGroup>
</When>
<When Condition="$(Platform)=='x64' Or $(Platform) == 'ARM64'">
<PropertyGroup>
<OutputPath>.\bin\Release\64-bit\</OutputPath>
</PropertyGroup>
</When>
<!-- For any other platform, use the platform name -->
<Otherwise>
<PropertyGroup>
<OutputPath>.\bin\Release\$(Platform)\</OutputPath>
</PropertyGroup>
</Otherwise>
</Choose>
</When>
<!-- For any other configuration, use debug properties-->
<Otherwise>
<PropertyGroup>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<DefineConstants>DEBUG;TRACE</DefineConstants>
</PropertyGroup>
<Choose>
<When Condition="$(Platform)=='x86' Or $(Platform)=='ARM32'">
<PropertyGroup>
<OutputPath>.\bin\$(Configuration)\32-bit\</OutputPath>
</PropertyGroup>
</When>
<When Condition="$(Platform)=='x64' Or $(Platform)=='ARM64'">
<PropertyGroup>
<OutputPath>.\bin\$(Configuration)\64-bit\</OutputPath>
</PropertyGroup>
</When>
</Choose>
</Otherwise>
</Choose>
<Target Name="ShowProperties">
<Message Text="DebugSymbols: $(DebugSymbols)"/>
<Message Text="Optimize: $(Optimize)"/>
<Message Text="DefineConstants: $(DefineConstants)"/>
<Message Text="OutputPath: $(OutputPath)"/>
</Target>
</Project>