다른 옵션을 사용하여 동일한 원본 파일 빌드
프로젝트를 빌드할 때 같은 구성 요소를 서로 다른 빌드 옵션으로 자주 컴파일하게 됩니다. 예를 들어 기호 정보가 포함된 디버그 빌드를 만들거나 기호 정보가 없지만 최적화가 사용하도록 설정된 릴리스 빌드를 만들 수 있습니다. x86 또는 x64와 같은 특정 플랫폼에서 실행되는 프로젝트를 빌드할 수도 있습니다. 이러한 모든 경우에 대부분의 빌드 옵션은 동일하게 유지되고, 빌드 구성을 제어하기 위해 몇 가지 옵션만 변경됩니다. MSBuild를 통해 속성과 조건을 사용하여 다양한 빌드 구성을 만듭니다.
속성을 사용하여 빌드 설정 제어
Property
요소는 임시 디렉터리의 위치와 같이 프로젝트 파일에서 여러 번 참조되는 변수를 정의하고 디버그 빌드 및 릴리스 빌드 등의 여러 구성에서 사용되는 속성 값을 설정합니다. 속성에 대한 자세한 내용은 MSBuild 속성을 참조하세요.
속성을 사용하면 프로젝트 파일을 변경할 필요 없이 빌드의 구성을 변경할 수 있습니다. Property
요소 및 PropertyGroup
요소의 Condition
특성을 사용하여 속성 값을 변경할 수 있습니다. MSBuild 조건에 대한 자세한 내용은 조건을 참조하세요.
또 다른 속성에 기반하는 속성 그룹을 설정하려면
다음과 같은
PropertyGroup
요소의Condition
특성을 사용합니다.<PropertyGroup Condition="'$(Flavor)'=='DEBUG'"> <DebugType>full</DebugType> <Optimize>no</Optimize> </PropertyGroup>
또 다른 속성에 기반하는 속성을 정의하려면
다음과 같은
Property
요소의Condition
특성을 사용합니다.<DebugType Condition="'$(Flavor)'=='DEBUG'">full</DebugType>
명령줄에서 속성 지정
프로젝트 파일이 여러 구성을 허용하도록 작성되면 프로젝트를 빌드할 때마다 해당 구성을 변경하는 기능을 포함해야 합니다. MSBuild는 -property 또는 -p 스위치를 사용하여 명령줄에서 속성을 지정할 수 있게 하는 방식으로 이 기능을 제공합니다.
명령줄에서 프로젝트 속성을 설정하려면
-property 스위치와 속성 및 속성 값을 함께 사용합니다. 예시:
msbuild file.proj -property:Flavor=Debug
또는
Msbuild file.proj -p:Flavor=Debug
명령줄에서 둘 이상의 프로젝트 속성을 지정하려면
-property 또는 -p 스위치와 속성 및 속성 값을 함께 여러 번 사용하거나, 하나의 property 또는 -p 스위치와 세미콜론(;)으로 구분된 여러 속성을 사용합니다. 예시:
msbuild file.proj -p:Flavor=Debug;Platform=x86
또는
msbuild file.proj -p:Flavor=Debug -p:Platform=x86
환경 변수는 속성으로 처리되고 MSBuild에 의해 자동으로 통합되기도 합니다. 환경 변수 사용에 대한 자세한 내용은 방법: 빌드 시 환경 변수 사용을 참조하세요.
명령 줄에서 지정된 속성 값이 프로젝트 파일에서 같은 속성에 설정된 모든 값보다 우선 적용되고 프로젝트 파일의 값이 환경 변수의 값보다 우선 적용됩니다.
프로젝트 태그에서
TreatAsLocalProperty
특성을 사용하여 이 동작을 변경할 수 있습니다. 해당 특성을 통해 나열된 속성 이름의 경우 명령줄에서 지정된 속성 값이 프로젝트 파일의 값보다 우선 적용되지 않습니다. 이 항목의 뒷부분에 있는 예제를 참조하세요.
예 1
다음 코드 예제 "Hello World" 프로젝트에는 디버그 빌드 및 릴리스 빌드를 만드는 데 사용할 수 있는 새로운 두 가지 속성 그룹이 포함됩니다.
이 프로젝트의 디버그 버전을 빌드하려면 다음을 입력합니다.
msbuild consolehwcs1.proj -p:flavor=debug
이 프로젝트의 일반 정품 버전을 빌드하려면 다음을 입력합니다.
msbuild consolehwcs1.proj -p:flavor=retail
<Project DefaultTargets = "Compile"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- Sets the default flavor if an environment variable called
Flavor is not set or specified on the command line -->
<PropertyGroup>
<Flavor Condition="'$(Flavor)'==''">DEBUG</Flavor>
</PropertyGroup>
<!-- Define the DEBUG settings -->
<PropertyGroup Condition="'$(Flavor)'=='DEBUG'">
<DebugType>full</DebugType>
<Optimize>no</Optimize>
</PropertyGroup>
<!-- Define the RETAIL settings -->
<PropertyGroup Condition="'$(Flavor)'=='RETAIL'">
<DebugType>pdbonly</DebugType>
<Optimize>yes</Optimize>
</PropertyGroup>
<!-- Set the application name as a property -->
<PropertyGroup>
<appname>HelloWorldCS</appname>
</PropertyGroup>
<!-- Specify the inputs by type and file name -->
<ItemGroup>
<CSFile Include = "consolehwcs1.cs"/>
</ItemGroup>
<Target Name = "Compile">
<!-- Run the Visual C# compilation using input files
of type CSFile -->
<CSC Sources = "@(CSFile)"
DebugType="$(DebugType)"
Optimize="$(Optimize)"
OutputAssembly="$(appname).exe" >
<!-- Set the OutputAssembly attribute of the CSC
task to the name of the executable file that is
created -->
<Output TaskParameter="OutputAssembly"
ItemName = "EXEFile" />
</CSC>
<!-- Log the file name of the output file -->
<Message Text="The output file is @(EXEFile)"/>
</Target>
</Project>
예제 2
다음 예제에서는 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
-->