MSBuild の条件構造
MSBuild には、Choose、When、Otherwise 要素で either/or 処理を行うためのメカニズムが用意されています。
Choose 要素を使用する
Choose
要素には、Condition
属性を持つ一連の When
要素が含まれます。この要素は、いずれかの評価結果が true
になるまで、上から下への順序でテストされます。 複数の When
要素が評価の結果、true
になる場合、最初の要素だけが使用されます。 Otherwise
要素 (存在する場合) は、When
要素の条件がtrue
に評価されない場合に評価されます。
Choose
要素は、Project
、When
、Otherwise
要素の子要素として使用できます。 When
要素と Otherwise
要素には、子要素として ItemGroup
、PropertyGroup
、Choose
を入れることができます。
例
次の例では、either/or 処理に Choose
要素と When
要素が使用されています。 プロジェクトのプロパティと項目は、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>
この例では、コンパイラ定数 DEFINED_CONSTANT
の条件が使用されます。 これらの定義は、 DefineConstants
プロパティに含まれています。 正規表現は、セミコロンで区切られたリスト内の完全な定数を照合するために使用されます。
<Choose>
<When Condition="$([System.Text.RegularExpressions.Regex]::IsMatch(
$(DefineConstants), '^(.*;)*DEFINED_CONSTANT(;.*)*$'))">
<!-- When DEFINED_CONSTANT is defined. -->
</When>
<!-- other conditions -->
</Choose>