MSBuild 조건부 구문
MSBuild는 Choose, When 및 Otherwise 요소를 포함하는 / 또는 처리 중 하나에 메커니즘을 제공합니다.
Choose 요소 사용
Choose
요소에는 true
로 계산될 때까지 위쪽에서 아래쪽 순서로 테스트되는 Condition
특성을 포함한 일련의 When
요소가 포함됩니다. 하나 이상의 When
요소가 true
로 계산되면 첫 번째 요소만 사용합니다. Otherwise
요소의 조건이 When
없으면 요소(있는 경우)가 계산됩니다true
.
Choose
요소를 Project
, When
및 Otherwise
요소의 자식 요소로 사용할 수 있습니다. When
및 Otherwise
요소에는 ItemGroup
, PropertyGroup
또는 Choose
자식 요소가 포함됩니다.
예시
다음 예제에서는 / 또는 처리 중 하나에 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>