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>

Voir aussi