Элемент Choose (MSBuild)

Вычисляет дочерние элементы для выбора одного набора элементов ItemGroup и/или элементов PropertyGroup для вычисления.

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

Элемент Choose содержит ряд When элементов с Condition атрибутами, которые тестируются в порядке сверху вниз, пока не будет оценено значение true. Если имеет значение true несколько When элементов, используется только первый элемент. Элемент Otherwise , если он присутствует, будет оцениваться, если условие для When элемента не соответствует true.

Синтаксис

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

Элементы и атрибуты

В следующих разделах описаны атрибуты, дочерние и родительские элементы.

Атрибуты

Нет.

Дочерние элементы

Элемент Description
Otherwise Необязательный элемент.

Указывает блок кода PropertyGroup и элементы ItemGroup для оценки, если условия всех элементов When оценены как false. Элемент Choose может содержать ноль элементов Otherwise или один такой элемент, который должен быть последним.
When Обязательный элемент.

Указывает один из возможных блоков кода, который может выбрать элемент Choose. Элемент When может содержать один или несколько элементов Choose.

Родительские элементы

Элемент Description
Otherwise Указывает блок кода, который должен быть выполнен, если условия всех элементов When оценены как false.
Проект Обязательный корневой элемент файла проекта MSBuild.
When Указывает один из возможных блоков кода, который может выбрать элемент Choose.

Замечания

Элементы Choose, When и Otherwise используются совместно, чтобы обеспечить выбор одного блока кода для выполнения из множества доступных вариантов. См. дополнительные сведения об условных конструкциях.

Пример

Следующий проект использует элемент Choose, чтобы выбрать набор значений свойств, который будет задан в элементах When. Если атрибуты Condition обоих элементов When оцениваются как false, в элементе Otherwise задаются значения свойств.

<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>

См. также