MSBuild koşullu yapıları
MSBuild, Seç, Ne Zaman ve Değilse öğeleriyle işlem yapmak için bir mekanizma sağlar.
Choose öğesini kullanma
öğesi, Choose
yukarıdan When
aşağıya doğru test edilen ve değerlendirmesi yapılana kadar öznitelikleri true
olan Condition
bir dizi öğe içerir. Birden When
fazla öğe olarak true
değerlendirilirse, yalnızca ilk öğe kullanılır. Bir Otherwise
öğe, varsa, bir When
öğedeki hiçbir koşul olarak değerlendirilmezse değerlendirilir true
.
Choose
öğeleri, When
ve Otherwise
öğelerinin Project
alt öğeleri olarak kullanılabilir. When
ve Otherwise
öğelerinin ItemGroup
, PropertyGroup
veya Choose
alt öğeleri olabilir.
Örnek
Aşağıdaki örnek, ve When
öğelerini ya da işlemek için kullanırChoose
. Projenin özellikleri ve öğeleri özelliğin Configuration
değerine bağlı olarak ayarlanır.
<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>
Bu örnekte, derleyici sabitindeki DEFINED_CONSTANT
bir koşul kullanılır. Bu tanımlar özelliğine DefineConstants
dahil edilir. Normal ifade noktalı virgülle ayrılmış bir listede tam sabiti eşleştirmek için kullanılır.
<Choose>
<When Condition="$([System.Text.RegularExpressions.Regex]::IsMatch(
$(DefineConstants), '^(.*;)*DEFINED_CONSTANT(;.*)*$'))">
<!-- When DEFINED_CONSTANT is defined. -->
</When>
<!-- other conditions -->
</Choose>