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. Un Otherwise
elemento, si está presente, se evalúa si no hay ninguna condición en un When
elemento 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
. Estas definiciones se incluyen en la DefineConstants
propiedad . 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>