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
요소의 자식 ItemGroup
및 PropertyGroup
요소가 실행되고 모든 후속 When
요소가 생략됩니다.
Choose
, When
및 Otherwise
요소는 몇 가지 가능한 대안 중에서 실행할 코드의 한 섹션을 선택하는 방법을 제공하기 위해 함께 사용됩니다. 자세한 내용은 조건부 구문을 참조하세요.
예시
다음 프로젝트에서는 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>