다음을 통해 공유


When 요소(MSBuild)

Choose 요소에서 선택할 수 있는 가능한 코드 블록을 지정합니다.

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

구문

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

특성 및 요소

다음의 섹션은 특성, 자식 요소 및 부모 요소에 대해 설명합니다.

특성

특성 설명
조건 필수 특성입니다.

평가할 조건입니다. 자세한 내용은 조건을 참조하세요.

자식 요소

요소 설명
선택 선택적 요소입니다.

자식 요소를 평가하여 실행할 코드의 한 섹션을 선택합니다. Choose 요소에는 When 요소가 0개 또는 그 이상 있을 수 있습니다.
ItemGroup 선택적 요소입니다.

사용자 정의 Item 요소 집합을 포함합니다. ItemGroup 요소에는 When 요소가 0개 또는 그 이상 있을 수 있습니다.
PropertyGroup 선택적 요소입니다.

사용자 정의 Property 요소 집합을 포함합니다. PropertyGroup 요소에는 When 요소가 0개 또는 그 이상 있을 수 있습니다.

부모 요소

요소 설명
Choose 요소(MSBuild) 자식 요소를 평가하여 실행할 코드의 한 섹션을 선택합니다.

설명

Condition 특성이 true로 평가되면 When 요소의 자식 ItemGroupPropertyGroup 요소가 실행되고 모든 후속 When 요소가 생략됩니다.

Choose, WhenOtherwise 요소는 몇 가지 가능한 대안 중에서 실행할 코드의 한 섹션을 선택하는 방법을 제공하기 위해 함께 사용됩니다. 자세한 내용은 조건부 구문을 참조하세요.

예시

다음 프로젝트에서는 Choose 요소를 사용하여 설정할 When 요소의 속성 값 집합을 선택합니다. 두 When 요소의 Condition 특성이 모두 false로 평가되면 Otherwise 요소의 속성 값이 설정됩니다. 예제를 실행할 때 명령줄에서 다양한 속성 설정(예: msbuild myproj.proj -p:Configuration=Test;Platform=x86)을 전달해보고 출력 경로의 모양을 확인합니다. 이 예제에서는 실제 플랫폼 이름이 아닌 플랫폼의 비트 수를 기준으로 출력 폴더를 포함한 디버그 및 릴리스 빌드에 대한 특정 속성을 설정하며, ‘Test’ 및 ‘Retail’ 구성도 지원하지만 ‘Retail’을 ‘Release’로 취급하는 것이 요구 사항이라고 가정합니다.

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

참고 항목