Элемент When (MSBuild)

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

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

Синтаксис

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

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

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

Атрибуты

Атрибут Description
Условие Обязательный атрибут элемента .

Проверяемое условие. Дополнительные сведения см. в разделе Условия.

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

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

Вычисляет дочерние элементы, чтобы выбрать один раздел кода для выполнения. Элемент Choose может содержать любое число элементов When, включая ноль.
ItemGroup Необязательный элемент.

Содержит набор определенных пользователем элементов Item. Элемент ItemGroup может содержать любое число элементов When, включая ноль.
PropertyGroup Необязательный элемент.

Содержит набор определенных пользователем элементов Property. Элемент PropertyGroup может содержать любое число элементов When, включая ноль.

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

Элемент Description
Элемент Choose (MSBuild) Вычисляет дочерние элементы, чтобы выбрать один раздел кода для выполнения.

Замечания

Если атрибут Condition имеет значение true, дочерние элементы ItemGroup и PropertyGroup элемента When выполняются, а все последующие элементы When пропускаются.

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

Пример

Следующий проект использует элемент Choose, чтобы выбрать набор значений свойств, который будет задан в элементах When. Если атрибуты Condition обоих элементов When оцениваются как false, в элементе Otherwise задаются значения свойств. При запуске примера попробуйте передать различные параметры свойств из командной строки, например msbuild myproj.proj -p:Configuration=Test;Platform=x86, и посмотреть, как выглядит выходной путь. В примере предполагается, что требование состоит в том, чтобы задать определенные свойства для сборок отладки и выпуска, включая выходную папку на основе разрядности платформы, а не фактического имени платформы, а также поддерживать конфигурации "Тест" и "Розничная торговля", но рассматривать "Розничная торговля" как "Выпуск".

<Project>
    <PropertyGroup>
       <Configuration Condition="$(Configuration) == ''">Debug</Configuration>
       <Platform Condition="$(Platform) == ''">x64</Platform>
    </PropertyGroup>

  <Choose>
     <When Condition="$(Configuration)=='Test'">
        <PropertyGroup>
            <DebugSymbols>true</DebugSymbols>
            <DebugType>full</DebugType>
            <Optimize>false</Optimize>
            <DefineConstants>DEBUG;TRACE</DefineConstants>
        </PropertyGroup>
        <Choose>
          <When Condition="$(Platform)=='x86' Or $(Platform) == 'ARM32'">
            <PropertyGroup>
                <OutputPath>.\bin\Test\32-bit\</OutputPath>
            </PropertyGroup>
          </When>
          <When Condition="$(Platform)=='x64' Or $(Platform) == 'ARM64'">
            <PropertyGroup>
                <OutputPath>.\bin\Test\64-bit\</OutputPath>
            </PropertyGroup>
          </When>
          <!-- For any other platform, use the platform name -->
          <Otherwise>
            <PropertyGroup>
              <OutputPath>.\bin\Test\$(Platform)\</OutputPath>
            </PropertyGroup>
          </Otherwise>
        </Choose>
      </When>
      <When Condition="$(Configuration)=='Retail' Or $(Configuration)=='Release'">
        <PropertyGroup>
            <DebugSymbols>false</DebugSymbols>
            <Optimize>true</Optimize>
            <DefineConstants>TRACE</DefineConstants>
        </PropertyGroup>
        <Choose>
          <When Condition="$(Platform)=='x86' Or $(Platform) == 'ARM32'">
             <PropertyGroup>
                <OutputPath>.\bin\Release\32-bit\</OutputPath>
             </PropertyGroup>
          </When>
          <When Condition="$(Platform)=='x64' Or $(Platform) == 'ARM64'">
             <PropertyGroup>
                <OutputPath>.\bin\Release\64-bit\</OutputPath>
             </PropertyGroup>
          </When>
          <!-- For any other platform, use the platform name -->
          <Otherwise>
            <PropertyGroup>
                <OutputPath>.\bin\Release\$(Platform)\</OutputPath>
            </PropertyGroup>
          </Otherwise>
        </Choose>
      </When>
      <!-- For any other configuration, use debug properties-->
      <Otherwise>
        <PropertyGroup>
            <DebugSymbols>true</DebugSymbols>
            <DebugType>full</DebugType>
            <Optimize>false</Optimize>
            <DefineConstants>DEBUG;TRACE</DefineConstants>
        </PropertyGroup>
        <Choose>
          <When Condition="$(Platform)=='x86' Or $(Platform)=='ARM32'">
            <PropertyGroup>
              <OutputPath>.\bin\$(Configuration)\32-bit\</OutputPath>
            </PropertyGroup>
          </When>
          <When Condition="$(Platform)=='x64' Or $(Platform)=='ARM64'">
            <PropertyGroup>
              <OutputPath>.\bin\$(Configuration)\64-bit\</OutputPath>
            </PropertyGroup>
          </When>
        </Choose>
       </Otherwise>
  </Choose>

  <Target Name="ShowProperties">
    <Message Text="DebugSymbols: $(DebugSymbols)"/>
    <Message Text="Optimize: $(Optimize)"/>
    <Message Text="DefineConstants: $(DefineConstants)"/>
    <Message Text="OutputPath: $(OutputPath)"/>
  </Target>
</Project>

См. также