When Element (MSBuild)

Note

This article applies to Visual Studio 2015. If you're looking for the latest Visual Studio documentation, use the version selector at the top left. We recommend upgrading to Visual Studio 2019. Download it here

Specifies a possible block of code for the Choose element to select.

<Project>
<Choose>
<When>
<Choose>
...
<Otherwise>
<Choose>
...

Syntax

<When Condition="'StringA'=='StringB'">  
    <PropertyGroup>... </PropertyGroup>  
    <ItemGroup>... </ItemGroup>  
    <Choose>... </Choose>  
</When>  

Attributes and Elements

The following sections describe attributes, child elements, and parent elements.

Attributes

Attribute Description
Condition Required attribute.

Condition to evaluate. For more information, see Conditions.

Child Elements

Element Description
Choose Optional element.

Evaluates child elements to select one section of code to execute. There may be zero or more Choose elements in a When element.
ItemGroup Optional element.

Contains a set of user-defined Item elements. There may be zero or more ItemGroup elements in a When element.
PropertyGroup Optional element.

Contains a set of user-defined Property elements. There may be zero or more PropertyGroup elements in an When element.

Parent Elements

Element Description
Choose Element (MSBuild) Evaluates child elements to select one section of code to execute.

Remarks

If the Condition attribute evaluates to true, the child ItemGroup and PropertyGroup elements of the When element are executed and all subsequent When elements are skipped.

The Choose, When, and Otherwise elements are used together to provide a way to select one section of code to execute out of a number of possible alternatives. For more information, see Conditional Constructs.

Example

The following project uses the Choose element to select which set of property values in the When elements to set. If the Condition attributes of both When elements evaluate to false, the property values in the Otherwise element are set.

<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>  
        <Otherwise>  
            <PropertyGroup>  
                <DebugSymbols>true</DebugSymbols>  
                <Optimize>false</Optimize>  
                <OutputPath>.\bin\$(Configuration)\</OutputPath>  
                <DefineConstants>DEBUG;TRACE</DefineConstants>  
            </PropertyGroup>  
        </Otherwise>  
    </Choose>  
    <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />  
</Project>  

See Also

Conditional Constructs
Project File Schema Reference