Konstruksi kondisional MSBuild
MSBuild menyediakan mekanisme untuk salah satu/atau pemrosesan dengan elemen Pilih, Kapan, dan Sebaliknya.
Menggunakan elemen Pilih
Elemen Choose
berisi serangkaian When
elemen dengan Condition
atribut yang diuji secara berurutan dari atas ke bawah hingga dievaluasi ke true
. Jika lebih dari satu When
elemen dievaluasi ke true
, hanya elemen pertama yang digunakan. Elemen Otherwise
, jika ada, dievaluasi jika tidak ada kondisi pada elemen yang When
dievaluasi ke true
.
Elemen Choose
dapat digunakan sebagai elemen turunan dari elemen Project
, When
dan Otherwise
. Elemen When
dan Otherwise
dapat memiliki elemen ItemGroup
, PropertyGroup
, atau Choose
turunan.
Contoh
Contoh berikut menggunakan elemen Choose
dan When
untuk pemrosesan either/or. Properti dan item untuk proyek diatur tergantung pada nilai properti 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>
Dalam contoh ini, kondisi pada konstanta DEFINED_CONSTANT
pengkompilasi digunakan. Definisi ini disertakan DefineConstants
dalam properti . Ekspresi reguler digunakan untuk mencocokkan konstanta yang tepat dalam daftar yang dipisahkan titik koma.
<Choose>
<When Condition="$([System.Text.RegularExpressions.Regex]::IsMatch(
$(DefineConstants), '^(.*;)*DEFINED_CONSTANT(;.*)*$'))">
<!-- When DEFINED_CONSTANT is defined. -->
</When>
<!-- other conditions -->
</Choose>