Construcciones condicionales de MSBuild

MSBuild proporciona un mecanismo para cualquier procesamiento con los elementos Choose, When y Otherwise.

Usar el elemento Choose

El elemento Choose contiene una serie de elementos When con atributos Condition que se prueban en orden de arriba abajo, hasta que uno se evalúe como true. Si más de un elemento When se evalúa como true, se usará solo el primero. Se evaluará un elemento Otherwise, en caso de estar presente, si ninguna condición de un elemento When se evalúa como true.

Los elementos Choose se pueden usar como elementos secundarios de los elementos Project, When y Otherwise. Los elementos When y Otherwise pueden tener elementos secundarios ItemGroup, PropertyGroup o Choose.

Ejemplo

En el ejemplo siguiente se usan los elementos Choose y When para cualquier procesamiento. Las propiedades y los elementos del proyecto se establecen en función dl valor de la propiedad 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>

En este ejemplo, se utiliza una condición en una constante del compilador DEFINED_CONSTANT. Éstas se incluyen en la propiedad DefinedConstants. La expresión regular se usa para hacer coincidir la constante exacta en una lista separada por punto y coma.

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

Vea también