방법: 동일한 소스 파일을 다른 옵션을 사용하여 빌드
자주 프로젝트를 빌드할 때 동일한 구성 요소를를 각기 다른 빌드 옵션을 컴파일합니다. 예를 들어, 기호 정보를 사용하여 디버그 빌드를 만들거나 기호 정보를 사용하지 않고 최적화가 설정된 릴리스 빌드를 만들 수 있습니다. 또는 x86이나 x64 같은 특정 플랫폼에서 실행할 프로젝트를 빌드할 수도 있습니다. 이 모든 경우 대부분의 빌드 옵션은 동일하고, 빌드 구성을 제어하기 위해 몇 가지 옵션만 변경됩니다. MSBuild에서는 속성과 조건을 사용하여 다양한 빌드 구성을 만듭니다.
속성을 사용하여 프로젝트 수정
Property 요소는 임시 디렉터리의 위치처럼 프로젝트 파일에서 여러 번 참조되는 변수 또는 디버그 빌드와 릴리스 빌드처럼 여러 구성에서 사용되는 속성의 값을 설정하는 변수를 정의합니다. 속성에 대한 자세한 내용은 MSBuild 속성을 참조하십시오.
프로젝트 파일을 변경하지 않아도 속성을 사용하여 빌드의 구성을 변경할 수 있습니다. Property 요소와 PropertyGroup 요소의 Condition 특성을 사용하여 속성의 값을 변경할 수 있습니다. MSBuild 조건에 대한 자세한 내용은 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 프로젝트 태그에서 특성. 해당 특성에 나열 된 속성 이름에 값은 프로젝트 파일에서 명령줄에 지정 된 속성 값 보다를 우선 하지 않습니다. 예를 들어가이 항목의 뒷부분에서 찾을 수 있습니다.
예제
다음 코드 예제에서는 "Hello World" 프로젝트에는 디버그 빌드와 릴리스 빌드를 만드는 데 사용할 수 있는 두 개의 새 속성 그룹이 포함 되어 있습니다.
이 프로젝트의 디버그 버전을 빌드하려면 다음을 입력합니다.
msbuild consolehwcs1.proj /p:flavor=debug
이 프로젝트의 일반 정품 버전을 빌드하려면 다음을 입력합니다.
msbuild consolehwcs1.proj /p:flavor=retail
<Project DefaultTargets = "Compile"
xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<!-- Sets the default flavor of 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>
다음 예제에서는 사용 방법을 보여 줍니다 있는 TreatAsLocalProperty 특성입니다. Color 속성의 값은 Blue 프로젝트 파일에서 및 Green 명령줄에서. 와 TreatAsLocalProperty="Color" 명령줄 속성 프로젝트 태그에 (Green) 프로젝트 파일에 정의 된 속성을 재정의 하지 않는 (Blue).
프로젝트를 빌드하려면 다음 명령을 입력 하십시오.
msbuild colortest.proj /t:go /property:Color=Green
<Project xmlns="https://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
-->