프로젝트를 빌드할 때 다른 빌드 옵션을 사용하여 동일한 구성 요소를 자주 컴파일합니다. 예를 들어 기호 정보가 있는 디버그 빌드 또는 기호 정보가 없지만 최적화를 사용하도록 설정된 릴리스 빌드를 만들 수 있습니다. 또는 x86 또는 x64와 같은 특정 플랫폼에서 실행할 프로젝트를 빌드할 수 있습니다. 이러한 모든 경우에 대부분의 빌드 옵션은 동일하게 유지됩니다. 빌드 구성을 제어하기 위해 몇 가지 옵션만 변경됩니다. MSBuild를 사용하면 속성 및 조건을 사용하여 원본 파일에 대한 다양한 빌드 구성을 만듭니다.
속성을 사용하여 빌드 설정 제어
요소는 Property
프로젝트 파일에 여러 참조가 있는 변수를 정의합니다. 변수는 임시 디렉터리의 위치를 식별하거나 디버그 및 릴리스 빌드와 같은 여러 구성에서 사용되는 속성의 값을 설정할 수 있습니다. 속성에 대한 자세한 내용은 msBuild 속성 참조하세요.
속성을 사용하여 프로젝트 파일을 변경하지 않고도 빌드의 구성을 변경할 수 있습니다.
Condition
및 PropertyGroup
요소의 Property
특성을 사용하면 속성 값을 변경할 수 있습니다.
다른 속성에 따라 달라지는 속성을 정의하려면 요소에서
Condition
Property
특성을 설정합니다.<DebugType Condition="'$(Flavor)'=='DEBUG'">full</DebugType>
다른 속성에 의존하는 속성 그룹을 정의하려면 요소에서
Condition
PropertyGroup
특성을 설정합니다.<PropertyGroup Condition="'$(Flavor)'=='DEBUG'"> <DebugType>full</DebugType> <Optimize>no</Optimize> </PropertyGroup>
MSBuild 조건에 대한 자세한 내용은 조건을 참조하세요.
명령줄에서 속성 지정
프로젝트 파일에서 여러 구성을 수락하는 경우 프로젝트를 빌드할 때마다 구성을 변경할 수 있는 기능이 필요합니다. MSBuild는 명령줄 -property
에서 또는 -p
스위치를 사용하여 속성을 지정할 수 있도록 하여 이 작업을 지원합니다.
명령줄에서 프로젝트 속성을 설정하려면 속성 이름과 값과 함께
-property
(또는-p
) 스위치를 사용하십시오.msbuild file.proj -property:Flavor=Debug
명령줄에서 둘 이상의 프로젝트 속성을 지정하려면 각 속성 이름 및 값에 대해
-property
(-p
) 스위치를 사용합니다.msbuild file.proj -p:Flavor=Debug -p:Platform=x86
명령줄에 여러 속성을 지정하는 바로 가기가 있습니다. (
-p
) 스위치를-property
한 번 입력하고 세미콜론(;
)을 사용하여 속성 이름 및 값 목록을 구분합니다.msbuild file.proj -p:Flavor=Debug;Platform=x86;Verbose=True
환경 변수 및 속성의 우선 순위 처리
MSBuild는 속성을 처리하는 것과 동일한 방식으로 환경 변수 값을 처리합니다. 빌드가 속성에 대해 여러 값을 발견하면 명령줄(가장 높음), 프로젝트 파일 및 환경 변수(가장 낮음)의 우선 순위에 따라 값을 설정합니다.
명령줄에 지정된 속성 값이 프로젝트 파일 또는 환경 변수의 동일한 속성에 대해 설정된 값보다 우선합니다.
프로젝트 파일에 설정된 속성 값이 환경 변수에 정의된 해당 값보다 우선합니다.
프로젝트 태그에 있는 TreatAsLocalProperty
특성을 사용하여 우선 순위 동작을 변경할 수 있습니다. 이 특성을 사용하여 속성 이름을 나열하는 경우 명령줄에 지정된 속성 값이 프로젝트 파일의 값보다 우선하지 않습니다. 예를 들어 TreatAsLocalProperty 특성의 우선 순위 변경을 참조하세요.
자세한 내용은 빌드에서 환경 변수 사용을 참조하세요.
속성 그룹을 사용하여 빌드 구성 변경
다음 예제에서는 프로젝트의 디버그 또는 릴리스 버전을 빌드할 두 속성 그룹을 정의하는 프로젝트 파일을 보여 줍니다.
디버그 버전을 빌드하려면
-property
스위치와 함께 속성 값을debug
로 설정하여flavor
를 사용하세요 (-p
).msbuild consolehwcs1.proj -p:flavor=debug
릴리스 버전을 빌드하려면 속성 값이
retail
로 설정된-p
스위치를-property
와 함께flavor
를 사용합니다.msbuild consolehwcs1.proj -p:flavor=retail
프로젝트 파일은 다음과 같습니다.
<Project DefaultTargets = "Compile"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- Set default flavor, if env variable 'Flavor' not set or specified on command line -->
<PropertyGroup>
<Flavor Condition="'$(Flavor)'==''">DEBUG</Flavor>
</PropertyGroup>
<!-- Define DEBUG settings -->
<PropertyGroup Condition="'$(Flavor)'=='DEBUG'">
<DebugType>full</DebugType>
<Optimize>no</Optimize>
</PropertyGroup>
<!-- Define RETAIL settings -->
<PropertyGroup Condition="'$(Flavor)'=='RETAIL'">
<DebugType>pdbonly</DebugType>
<Optimize>yes</Optimize>
</PropertyGroup>
<!-- Set application name as a property -->
<PropertyGroup>
<appname>HelloWorldCS</appname>
</PropertyGroup>
<!-- Specify inputs by type and file name -->
<ItemGroup>
<CSFile Include = "consolehwcs1.cs"/>
</ItemGroup>
<Target Name = "Compile">
<!-- Run Visual C# compilation using input file of type CSFile -->
<CSC Sources = "@(CSFile)"
DebugType="$(DebugType)"
Optimize="$(Optimize)"
OutputAssembly="$(appname).exe" >
<!-- Set OutputAssembly attribute of CSC task to name of created executable file -->
<Output TaskParameter="OutputAssembly"
ItemName = "EXEFile" />
</CSC>
<!-- Log file name of output file -->
<Message Text="The output file is @(EXEFile)"/>
</Target>
</Project>
TreatAsLocalProperty 특성으로 우선 순위 변경
다음 예제에서는 특성을 사용하는 TreatAsLocalProperty
방법을 보여 줍니다. 속성의 Color
값 Blue
은 프로젝트 파일 및 Green
명령줄에 있습니다. 프로젝트 태그의 TreatAsLocalProperty="Color"
특성 설정을 사용하면 명령줄 속성()이 프로젝트 파일(Green
Blue
)에 정의된 속성 값을 재정의하지 않습니다.
프로젝트를 빌드하려면 다음 명령을 입력합니다.
msbuild colortest.proj -t:go -property:Color=Green
프로젝트 파일은 다음과 같습니다.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
ToolsVersion="4.0" TreatAsLocalProperty="Color">
<PropertyGroup>
<Color>Blue</Color>
</PropertyGroup>
<Target Name="go">
<Message Text="Color: $(Color)" />
</Target>
</Project>
<!--
Output with TreatAsLocalProperty="Color" in project tag:
Color: Blue
Output without TreatAsLocalProperty="Color" in project tag:
Color: Green
-->