MSBuild Conditional Constructs
Note
This article applies to Visual Studio 2015. If you're looking for the latest Visual Studio documentation, see Visual Studio documentation. We recommend upgrading to the latest version of Visual Studio. Download it here
MSBuild provides a mechanism for either/or processing with the Choose, When, and Otherwise elements.
Using the Choose Element
The Choose
element contains a series of When
elements with Condition
attributes that are tested in order from top to bottom until one evaluates to true
. If more than one When
element evaluates to true
, only the first one is used. An Otherwise
element, if present, will be evaluated if no condition on a When
element evaluates to true
.
Choose
elements can be used as child elements of Project
, When
and Otherwise
elements. When
and Otherwise
elements can have ItemGroup
, PropertyGroup
, or Choose
child elements.
Example
The following example uses the Choose
and When
elements for either/or processing. The properties and items for the project are set depending on the value of the Configuration
property.
<Project xmlns="https://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>
See Also
Choose Element (MSBuild)
When Element (MSBuild)
Otherwise Element (MSBuild)
MSBuild Reference