Constructos condicionais do MSBuild

O MSBuild fornece um mecanismo para tanto/ou processar com os elementos Choose, When e Otherwise.

Usar o elemento Choose

O elemento Choose contém uma série de elementos de When com atributos Condition que são testados na ordem de cima para baixo até que um seja avaliado como true. Se mais de um elemento When for avaliado como true, somente o primeiro será usado. Um Otherwise elemento, se presente, é avaliado se nenhuma condição em um When elemento for avaliada como true.

Os elementos Choose podem ser usados como elementos filhos dos elementos Project, When e Otherwise. Os elementos When e Otherwise podem ter elementos filho ItemGroup, PropertyGroup ou Choose.

Exemplo

O exemplo a seguir usa os elementos Choose e When para processamento de um/ou outro. As propriedades e os itens do projeto são definidos dependendo do valor da propriedade 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>

Nesse exemplo, uma condição em uma constante do compilador DEFINED_CONSTANT é usada. Essas definições estão incluídas na DefineConstants propriedade. A expressão regular é usada para corresponder à constante exata em uma lista separada por ponto e vírgula.

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

Confira também