방법: 동일한 소스 파일을 다른 옵션을 사용하여 빌드
자주 프로젝트를 빌드할 때 동일한 구성 요소를를 각기 다른 빌드 옵션을 컴파일합니다.예를 들어, 기호 정보를 사용하여 디버그 빌드를 만들거나 기호 정보를 사용하지 않고 최적화가 설정된 릴리스 빌드를 만들 수 있습니다.또는 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
-->