MSBuild 속성MSBuild Properties

빌드를 구성하는 데 사용될 수 있는 이름/값 쌍인 속성은Properties are name-value pairs that can be used to configure builds. 작업에 값을 전달하고, 조건을 평가하고, 프로젝트 파일 전체에서 참조할 값을 저장하는 데 유용합니다.Properties are useful for passing values to tasks, evaluating conditions, and storing values that will be referenced throughout the project file.

프로젝트 파일에서 속성 정의 및 참조Defining and Referencing Properties in a Project File

속성 이름을 포함하는 요소를 PropertyGroup 요소의 자식으로 만들어 속성을 선언합니다.Properties are declared by creating an element that has the name of the property as a child of a PropertyGroup element. 예를 들어 다음 XML은 값이 BuildBuildDir 속성을 만듭니다.For example, the following XML creates a property named BuildDir that has a value of Build.

<PropertyGroup>  
    <BuildDir>Build</BuildDir>  
</PropertyGroup>  

프로젝트 파일 전체에서 $(PropertyName) 구문을 사용하여 속성을 참조합니다.Throughout the project file, properties are referenced by using the syntax $(PropertyName). 예를 들어 이전 예제의 속성은 $(BuildDir)을 사용하여 참조합니다.For example, the property in the previous example is referenced by using $(BuildDir).

속성을 다시 정의하여 속성값을 변경할 수 있습니다.Property values can be changed by redefining the property. 다음 XML을 사용하면 BuildDir 속성에 새 값을 제공할 수 있습니다.The BuildDir property can be given a new value by using this XML:

<PropertyGroup>  
    <BuildDir>Alternate</BuildDir>  
</PropertyGroup>  

속성은 프로젝트 파일에 표시되는 순서대로 평가됩니다.Properties are evaluated in the order in which they appear in the project file. 이전 값을 할당한 후에 BuildDir의 새 값을 선언해야 합니다.The new value for BuildDir must be declared after the old value is assigned.

예약된 속성Reserved Properties

MSBuild는 몇 개의 속성 이름을 예약하여 프로젝트 파일과 MSBuild 이진 파일에 대한 정보를 저장합니다.MSBuild reserves some property names to store information about the project file and the MSBuild binaries. 이러한 속성은 다른 속성과 마찬가지로 $ 표기법을 사용하여 참조됩니다.These properties are referenced by using the $ notation, just like any other property. 예를 들어 $(MSBuildProjectFile)은 파일 확장명을 포함한 프로젝트 파일의 전체 파일 이름을 반환합니다.For example, $(MSBuildProjectFile) returns the complete file name of the project file, including the file name extension.

자세한 내용은 방법: 프로젝트 파일의 이름 또는 위치 참조MSBuild의 예약된 속성 및 잘 알려진 속성을 참조하세요.For more information, see How to: Reference the Name or Location of the Project File and MSBuild Reserved and Well-Known Properties.

환경 속성Environment Properties

예약된 속성을 참조하는 것과 같이 프로젝트 파일에서 환경 변수를 참조할 수 있습니다.You can reference environment variables in project files just as you reference reserved properties. 예를 들어 프로젝트 파일에서 PATH 환경 변수를 사용하려면 $(Path)를 사용합니다.For example, to use the PATH environment variable in your project file, use $(Path). 프로젝트에 환경 속성과 이름이 같은 속성 정의가 포함되어 있으면 프로젝트의 속성이 환경 변수의 값을 재정의합니다.If the project contains a property definition that has the same name as an environment property, the property in the project overrides the value of the environment variable.

각 MSBuild 프로젝트에는 격리된 환경 블록을 가지고 있습니다. 오직 읽거나 자체 블록에 기록만 합니다.Each MSBuild project has an isolated environment block: it only sees reads and writes to its own block. MSBuild는 프로젝트 파일을 평가하거나 빌드하기 전에 속성 컬렉션을 초기화하는 경우에만 환경 변수를 읽습니다.MSBuild only reads environment variables when it initializes the property collection, before the project file is evaluated or built. 그 후 환경 속성은 고정됩니다. 즉, 각 생성된 도구가 같은 이름과 값으로 시작합니다.After that, environment properties are static, that is, each spawned tool starts with the same names and values.

생성된 도구 내에서 환경 변수의 현재 값을 가져오려면 속성 함수 System.Environment.GetEnvironmentVariable을 사용합니다.To get the current value of environment variables from within a spawned tool, use the Property Functions System.Environment.GetEnvironmentVariable. 그러나 작업 매개 변수 EnvironmentVariables를 사용하는 메서드가 좋습니다.The preferred method, however, is to use the task parameter EnvironmentVariables. 이 문자열 배열에 설정된 환경 속성은 시스템 환경 변수에 영향을 주지 않고 생성된 도구에 전달할 수 있습니다.Environment properties set in this string array can be passed to the spawned tool without affecting the system environment variables.

모든 환경 변수가 읽어들여져 초기 속성이 되는 것은 아닙니다.Not all environment variables are read in to become initial properties. "386" 같은 유효한 MSBuild 속성 이름이 아닌 모든 환경 변수는 무시됩니다.Any environment variable whose name is not a valid MSBuild property names, such as "386", is ignored.

자세한 내용은 방법: 빌드 시 환경 변수 사용을 참조하세요.For more information, see How to: Use Environment Variables in a Build.

레지스트리 속성Registry Properties

다음 구문을 사용하여 시스템 레지스트리 값을 읽을 수 있습니다. 여기서 Hive는 HKEY_LOCAL_MACHINE과 같은 레지스트리 하이브, Key는 키 이름, SubKey는 하위 키 이름, Value는 하위 키의 값입니다.You can read system registry values by using the following syntax, where Hive is the registry hive (for example, HKEY_LOCAL_MACHINE ), Key is the key name, SubKey is the subkey name, and Value is the value of the subkey.

$(registry:Hive\MyKey\MySubKey@Value)  

기본 하위 키 값을 가져오려면 Value를 생략합니다.To get the default subkey value, omit the Value.

$(registry:Hive\MyKey\MySubKey)  

이 레지스트리 값을 사용하여 빌드 속성을 초기화할 수 있습니다.This registry value can be used to initialize a build property. 예를 들어 Visual Studio 웹 브라우저 홈 페이지를 나타내는 빌드 속성을 만들려면 다음 코드를 사용합니다.For example, to create a build property that represents the Visual Studio web browser home page, use this code:

<PropertyGroup>  
  <VisualStudioWebBrowserHomePage>  
    $(registry:HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0\WebBrowser@HomePage)  
  </VisualStudioWebBrowserHomePage>  
<PropertyGroup>  

전역 속성Global Properties

MSBuild는 /property 또는 /p 스위치를 사용하여 명령줄에서 속성을 설정할 수 있습니다.MSBuild lets you set properties on the command line by using the /property (or /p) switch. 이러한 전역 속성값은 프로젝트 파일에서 설정되는 속성값을 재정의합니다.These global property values override property values that are set in the project file. 여기에는 환경 속성이 포함되지만 변경할 수 없는 예약된 속성은 포함되지 않습니다.This includes environment properties, but does not include reserved properties, which cannot be changed.

다음 예제에서는 전역 Configuration 속성을 DEBUG로 설정합니다.The following example sets the global Configuration property to DEBUG.

msbuild.exe MyProj.proj /p:Configuration=DEBUG  

MSBuild 작업의 Properties 특성을 사용하여 다중 프로젝트 빌드의 자식 프로젝트에 대해 전역 속성을 설정하거나 수정할 수도 있습니다.Global properties can also be set or modified for child projects in a multi-project build by using the Properties attribute of the MSBuild task. MSBuild 작업의 RemoveProperties 특성을 사용하여 전달하지 않을 속성 목록을 지정하지 않을 경우 전역 속성도 자식 프로젝트로 전달됩니다.Global properties are also forwarded to child projects unless the RemoveProperties attribute of the MSBuild task is used to specify the list of properties not to forward. 자세한 내용은 MSBuild 작업을 참조하세요.For more information, see MSBuild Task.

프로젝트 태그에 TreatAsLocalProperty 특성을 사용하여 속성을 지정할 경우, 해당 전역 속성 값은 프로젝트 파일에 설정된 속성 값을 재정의하지 않습니다.If you specify a property by using the TreatAsLocalProperty attribute in a project tag, that global property value doesn't override the property value that's set in the project file. 자세한 내용은 Project 요소(MSBuild)방법: 동일한 소스 파일을 다른 옵션을 사용하여 빌드를 참조하세요.For more information, see Project Element (MSBuild) and How to: Build the Same Source Files with Different Options.

속성 함수Property Functions

.NET Framework 버전 4부터는 속성 함수를 사용하여 MSBuild 스크립트를 평가할 수 있습니다.Starting in .NET Framework version 4, you can use property functions to evaluate your MSBuild scripts. MSBuild 작업을 사용하지 않고도 시스템 시간을 읽고 문자열을 비교하며 정규식을 일치시키고 빌드 스크립트 내에서 여러 가지 다른 작업을 수행할 수 있습니다.You can read the system time, compare strings, match regular expressions, and perform many other actions within your build script without using MSBuild tasks.

문자열(인스턴스) 메서드를 사용하면 모든 속성값에 대해 작업을 수행할 수 있으며 대부분의 시스템 클래스에 대해 정적 메서드를 호출할 수 있습니다.You can use string (instance) methods to operate on any property value, and you can call the static methods of many system classes. 예를 들어 다음과 같이 빌드 속성을 오늘 날짜로 설정할 수 있습니다.For example, you can set a build property to today's date as follows.

<Today>$([System.DateTime]::Now.ToString("yyyy.MM.dd"))</Today>  

자세한 내용 및 속성 함수 목록은 속성 함수를 참조하세요.For more information, and a list of property functions, see Property Functions.

실행 중에 속성 만들기Creating Properties During Execution

Target 요소 외부에 배치되는 속성의 경우 빌드의 평가 단계에서 값이 할당됩니다.Properties positioned outside Target elements are assigned values during the evaluation phase of a build. 후속 실행 단계 중에 다음과 같이 속성을 만들거나 수정할 수 있습니다.During the subsequent execution phase, properties can be created or modified as follows:

  • 모든 작업에서 속성을 내보낼 수 있습니다.A property can be emitted by any task. 속성을 내보내려면 Task 요소에 PropertyName 특성이 포함된 자식 Output 요소가 있어야 합니다.To emit a property, the Task element must have a child Output element that has a PropertyName attribute.

  • CreateProperty 작업에서 속성을 내보낼 수 있습니다.A property can be emitted by the CreateProperty task. 이러한 사용법은 더 이상 사용되지 않습니다.This usage is deprecated.

  • .NET Framework 3.5부터는 Target 요소가 속성 선언이 들어 있을 수 있는 PropertyGroup 요소를 포함할 수 있습니다.Starting in the .NET Framework 3.5, Target elements may contain PropertyGroup elements that may contain property declarations.

속성에 XML 저장Storing XML in Properties

속성은 작업에 값을 전달하거나 로깅 정보를 표시하는 데 사용할 수 있는 임의의 XML을 포함할 수 있습니다.Properties can contain arbitrary XML, which can help in passing values to tasks or displaying logging information. 다음 예제에서는 XML 및 기타 속성 참조를 포함하는 값이 있는 ConfigTemplate 속성을 보여 줍니다.The following example shows the ConfigTemplate property, which has a value that contains XML and other property references. MSBuildMSBuild는 개별 속성값을 사용하여 속성 참조를 바꿉니다. replaces the property references by using their respective property values. 속성값은 나타나는 순서대로 할당됩니다.Property values are assigned in the order in which they appear. 따라서 이 예제의 경우 $(MySupportedVersion), $(MyRequiredVersion), $(MySafeMode)가 이미 정의되어 있어야 합니다.Therefore, in this example, $(MySupportedVersion), $(MyRequiredVersion), and $(MySafeMode) should have already been defined.


<PropertyGroup>  
    <ConfigTemplate>  
        <Configuration>  
            <Startup>  
                <SupportedRuntime  
                    ImageVersion="$(MySupportedVersion)"  
                    Version="$(MySupportedVersion)"/>  
                <RequiredRuntime  
                    ImageVersion="$(MyRequiredVersion)"  
                    Version="$(MyRequiredVersion)"  
                    SafeMode="$(MySafeMode)"/>  
            </Startup>  
        </Configuration>  
    </ConfigTemplate>  
</PropertyGroup>  

참고 항목See Also

MSBuild 개념MSBuild Concepts
MSBuildMSBuild
방법: 빌드 시 환경 변수 사용 How to: Use Environment Variables in a Build
방법: 프로젝트 파일의 이름 또는 위치 참조 How to: Reference the Name or Location of the Project File
방법: 동일한 소스 파일을 다른 옵션을 사용하여 빌드 How to: Build the Same Source Files with Different Options
MSBuild의 예약된 속성 및 잘 알려진 속성 MSBuild Reserved and Well-Known Properties
Property 요소(MSBuild)Property Element (MSBuild)