Partager via


Constructions conditionnelles MSBuild

MSBuild fournit un mécanisme de traitement de type « soit/soit » avec les éléments Choose, When et Otherwise.

Utiliser l’élément Choose

L’élément Choose contient une série d’éléments When avec des attributs Condition qui sont testés du haut vers le bas, jusqu’à ce qu’un élément avec la valeur true soit trouvé. Si plusieurs éléments When ont la valeur true, seul le premier est utilisé. Un Otherwise élément, s’il est présent, est évalué si aucune condition sur un When élément est évaluée à true.

Les éléments Choose peuvent être utilisés comme des éléments enfants des éléments Project, When et Otherwise. Les éléments When et Otherwise peuvent avoir des éléments enfants ItemGroup, PropertyGroup ou Choose.

Exemple

L’exemple suivant utilise les éléments Choose et When pour un traitement de type « soit/soit ». Les propriétés et les éléments du projet sont définis en fonction de la valeur de la propriété Configuration.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
    <PropertyGroup>
        <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
        <OutputType>Exe</OutputType>
        <RootNamespace>ConsoleApplication1</RootNamespace>
        <AssemblyName>ConsoleApplication1</AssemblyName>
        <WarningLevel>4</WarningLevel>
    </PropertyGroup>
    <Choose>
        <When Condition=" '$(Configuration)'=='Debug' ">
            <PropertyGroup>
                <DebugSymbols>true</DebugSymbols>
                <DebugType>full</DebugType>
                <Optimize>false</Optimize>
                <OutputPath>.\bin\Debug\</OutputPath>
                <DefineConstants>DEBUG;TRACE</DefineConstants>
            </PropertyGroup>
            <ItemGroup>
                <Compile Include="UnitTesting\*.cs" />
                <Reference Include="NUnit.dll" />
            </ItemGroup>
        </When>
        <When Condition=" '$(Configuration)'=='retail' ">
            <PropertyGroup>
                <DebugSymbols>false</DebugSymbols>
                <Optimize>true</Optimize>
                <OutputPath>.\bin\Release\</OutputPath>
                <DefineConstants>TRACE</DefineConstants>
            </PropertyGroup>
        </When>
    </Choose>
    <!-- Rest of Project -->
</Project>

Dans cet exemple, une condition sur une constante DEFINED_CONSTANT du compilateur est utilisée. Ces définitions sont incluses dans la DefineConstants propriété. L’expression régulière est utilisée pour mettre en correspondance la constante exacte dans une liste séparée par des points-virgules.

<Choose>
   <When Condition="$([System.Text.RegularExpressions.Regex]::IsMatch(
         $(DefineConstants), '^(.*;)*DEFINED_CONSTANT(;.*)*$'))">
      <!-- When DEFINED_CONSTANT is defined. -->
   </When>
   <!-- other conditions -->
</Choose>

Voir aussi