속성 함수Property Functions

.NET Framework 버전 4 및 4.5에서는 속성 함수를 사용하여 MSBuild 스크립트를 평가할 수 있습니다.In the .NET Framework versions 4 and 4.5, property functions can be used to evaluate MSBuild scripts. 속성 함수는 속성이 나타나는 곳마다 사용할 수 있습니다.Property functions can be used wherever properties appear. 작업과 달리 속성 함수는 대상 외부에서 사용할 수 있으며, 대상이 실행되기 전에 평가됩니다.Unlike tasks, property functions can be used outside of targets, and are evaluated before any target runs.

MSBuild 작업을 사용하지 않고도 시스템 시간을 읽고 문자열을 비교하며 정규식을 일치시키고 빌드 스크립트의 다른 작업을 수행할 수 있습니다.Without using MSBuild tasks, you can read the system time, compare strings, match regular expressions, and perform other actions in your build script. MSBuild는 문자열을 숫자로, 숫자를 문자열로 변환하려고 하며, 필요한 경우 다른 변환을 수행합니다.MSBuild will try to convert string to number and number to string, and make other conversions as required.

속성 함수 구문Property Function Syntax

다음과 같은 세 가지 종류의 속성 함수가 있으며, 각 함수의 구문은 서로 다릅니다.These are three kinds of property functions; each function has a different syntax:

  • 문자열(인스턴스) 속성 함수String (instance) property functions

  • 정적 속성 함수Static property functions

  • MSBuild 속성 함수MSBuild property functions

문자열 속성 함수String Property Functions

모든 빌드 속성 값은 문자열 값입니다.All build property values are just string values. 문자열(인스턴스) 메서드를 사용하여 모든 속성 값에 대해 수행할 수 있습니다.You can use string (instance) methods to operate on any property value. 예를 들어, 다음 코드를 사용하여 전체 경로를 나타내는 빌드 속성에서 드라이브 이름(처음 세 문자)을 추출할 수 있습니다.For example, you can extract the drive name (the first three characters) from a build property that represents a full path by using this code:

$(ProjectOutputFolder.Substring(0,3))

정적 속성 함수Static Property Functions

빌드 스크립트에서 많은 시스템 클래스의 정적 속성 및 메서드에 액세스할 수 있습니다.In your build script, you can access the static properties and methods of many system classes. 정적 속성값을 가져오려면 다음 구문을 사용합니다. 여기서 Class는 시스템 클래스의 이름이고 Property는 속성의 이름입니다.To get the value of a static property, use the following syntax, where Class is the name of the system class and Property is the name of the property.

$([Class]::Property)

예를 들어, 다음 코드를 사용하여 빌드 속성을 현재 날짜 및 시간으로 설정할 수 있습니다.For example, you can use the following code to set a build property to the current date and time.

<Today>$([System.DateTime]::Now)</Today>

정적 메서드를 호출하려면 다음 구문을 사용합니다. 여기서 Class는 시스템 클래스의 이름이고 Method는 메서드의 이름이며 (Parameters)는 메서드의 매개 변수 목록입니다.To call a static method, use the following syntax, where Class is the name of the system class, Method is the name of the method, and (Parameters) is the parameter list for the method:

$([Class]::Method(Parameters))

예를 들어, 빌드 속성을 새 GUID로 설정하려면 다음 스크립트를 사용하면 됩니다.For example, to set a build property to a new GUID, you can use this script:

<NewGuid>$([System.Guid]::NewGuid())</NewGuid>

정적 속성 함수에는 다음과 같은 시스템 클래스의 모든 정적 메서드 또는 속성을 사용할 수 있습니다.In static property functions, you can use any static method or property of these system classes:

  • System.ByteSystem.Byte

  • System.CharSystem.Char

  • System.ConvertSystem.Convert

  • System.DateTimeSystem.DateTime

  • System.DecimalSystem.Decimal

  • System.DoubleSystem.Double

  • System.EnumSystem.Enum

  • System.GuidSystem.Guid

  • System.Int16System.Int16

  • System.Int32System.Int32

  • System.Int64System.Int64

  • System.IO.PathSystem.IO.Path

  • System.MathSystem.Math

  • System.Runtime.InteropServices.OSPlatformSystem.Runtime.InteropServices.OSPlatform

  • System.Runtime.InteropServices.RuntimeInformationSystem.Runtime.InteropServices.RuntimeInformation

  • System.UInt16System.UInt16

  • System.UInt32System.UInt32

  • System.UInt64System.UInt64

  • System.SByteSystem.SByte

  • System.SingleSystem.Single

  • System.StringSystem.String

  • System.StringComparerSystem.StringComparer

  • System.TimeSpanSystem.TimeSpan

  • System.Text.RegularExpressions.RegexSystem.Text.RegularExpressions.Regex

  • Microsoft.Build.Utilities.ToolLocationHelperMicrosoft.Build.Utilities.ToolLocationHelper

    또한 다음 정적 메서드 및 속성을 사용할 수 있습니다.In addition, you can use the following static methods and properties:

  • System.Environment::CommandLineSystem.Environment::CommandLine

  • System.Environment::ExpandEnvironmentVariablesSystem.Environment::ExpandEnvironmentVariables

  • System.Environment::GetEnvironmentVariableSystem.Environment::GetEnvironmentVariable

  • System.Environment::GetEnvironmentVariablesSystem.Environment::GetEnvironmentVariables

  • System.Environment::GetFolderPathSystem.Environment::GetFolderPath

  • System.Environment::GetLogicalDrivesSystem.Environment::GetLogicalDrives

  • System.IO.Directory::GetDirectoriesSystem.IO.Directory::GetDirectories

  • System.IO.Directory::GetFilesSystem.IO.Directory::GetFiles

  • System.IO.Directory::GetLastAccessTimeSystem.IO.Directory::GetLastAccessTime

  • System.IO.Directory::GetLastWriteTimeSystem.IO.Directory::GetLastWriteTime

  • System.IO.Directory::GetParentSystem.IO.Directory::GetParent

  • System.IO.File::ExistsSystem.IO.File::Exists

  • System.IO.File::GetCreationTimeSystem.IO.File::GetCreationTime

  • System.IO.File::GetAttributesSystem.IO.File::GetAttributes

  • System.IO.File::GetLastAccessTimeSystem.IO.File::GetLastAccessTime

  • System.IO.File::GetLastWriteTimeSystem.IO.File::GetLastWriteTime

  • System.IO.File::ReadAllTextSystem.IO.File::ReadAllText

정적 속성에 대한 인스턴스 메서드 호출Calling Instance Methods on Static Properties

개체 인스턴스를 반환하는 정적 속성에 액세스하는 경우 해당 개체의 인스턴스 메서드를 호출할 수 있습니다.If you access a static property that returns an object instance, you can invoke the instance methods of that object. 인스턴스 메서드를 호출하려면 다음 구문을 사용합니다. 여기서 Class는 시스템 클래스의 이름이고 Property는 속성의 이름이며 Method는 메서드의 이름이고, (Parameters)는 메서드의 매개 변수 목록입니다.To invoke an instance method, use the following syntax, where Class is the name of the system class, Property is the name of the property, Method is the name of the method, and (Parameters) is the parameter list for the method:

$([Class]::Property.Method(Parameters))

클래스의 이름은 네임스페이스를 포함하는 정규화된 이름이어야 합니다.The name of the class must be fully qualified with the namespace.

예를 들어, 다음 코드를 사용하여 빌드 속성을 현재 날짜 오늘로 설정할 수 있습니다.For example, you can use the following code to set a build property to the current date today.

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

MSBuild 속성 함수MSBuild Property Functions

빌드의 여러 정적 메서드에 액세스하여 산술, 비트 논리 및 이스케이프 문자 지원을 제공할 수 있습니다.Several static methods in your build can be accessed to provide arithmetic, bitwise logical, and escape character support. 다음 구문을 사용하여 이러한 메서드에 액세스합니다. 여기서 Method는 메서드의 이름이고 Parameters는 메서드의 매개 변수 목록입니다.You access these methods by using the following syntax, where Method is the name of the method and Parameters is the parameter list for the method.

$([MSBuild]::Method(Parameters))

예를 들어, 숫자 값을 가지는 두 속성을 함께 추가하려면 다음 코드를 사용합니다.For example, to add together two properties that have numeric values, use the following code.

$([MSBuild]::Add($(NumberOne), $(NumberTwo))

다음은 MSBuild 속성 함수 목록입니다.Here is a list of MSBuild property functions:

함수 시그니처Function Signature 설명Description
double Add(double a, double b)double Add(double a, double b) 두 double을 더합니다.Add two doubles.
long Add(long a, long b)long Add(long a, long b) 두 long을 더합니다.Add two longs.
double Subtract(double a, double b)double Subtract(double a, double b) 한 double에서 다른 한 double을 뺍니다.Subtract two doubles.
long Subtract(long a, long b)long Subtract(long a, long b) 한 long에서 다른 한 long을 뺍니다.Subtract two longs.
double Multiply(double a, double b)double Multiply(double a, double b) 두 double을 곱합니다.Multiply two doubles.
long Multiply(long a, long b)long Multiply(long a, long b) 두 long을 곱합니다.Multiply two longs.
double Divide(double a, double b)double Divide(double a, double b) 한 double을 다른 한 double로 나눕니다.Divide two doubles.
long Divide(long a, long b)long Divide(long a, long b) 한 long을 다른 한 long으로 나눕니다.Divide two longs.
double Modulo(double a, double b)double Modulo(double a, double b) 한 double을 다른 한 double로 나눈 나머지입니다.Modulo two doubles.
long Modulo(long a, long b)long Modulo(long a, long b) 한 long을 다른 한 long으로 나눈 나머지입니다.Modulo two longs.
string Escape(string unescaped)string Escape(string unescaped) MSBuild 이스케이프 규칙에 따라 문자열을 이스케이프합니다.Escape the string according to MSBuild escaping rules.
string Unescape(string escaped)string Unescape(string escaped) MSBuild 이스케이프 규칙에 따라 문자열을 이스케이프하지 않습니다.Unescape the string according to MSBuild escaping rules.
int BitwiseOr(int first, int second)int BitwiseOr(int first, int second) first와 second에 대해 비트 OR을 수행합니다(first | second).Perform a bitwise OR on the first and second (first | second).
int BitwiseAnd(int first, int second)int BitwiseAnd(int first, int second) first와 second에 대해 비트 AND를 수행합니다(first & second).Perform a bitwise AND on the first and second (first & second).
int BitwiseXor(int first, int second)int BitwiseXor(int first, int second) first와 second에 대해 비트 XOR를 수행합니다(first ^ second).Perform a bitwise XOR on the first and second (first ^ second).
int BitwiseNot(int first)int BitwiseNot(int first) 비트 NOT을 수행합니다(~first).Perform a bitwise NOT (~first).
bool IsOsPlatform(string platformString)bool IsOsPlatform(string platformString) 현재 OS 플랫폼이 platformString인지 여부를 지정합니다.Specify whether the current OS platform is platformString. platformStringOSPlatform의 멤버여야 합니다.platformString must be a member of OSPlatform.
bool IsOSUnixLikebool IsOSUnixLike 현재 OS가 Unix 시스템인 경우 True입니다.True if current OS is a Unix system.
string NormalizePath(params string[] path)string NormalizePath(params string[] path) 제공된 경로의 정규화된 전체 경로를 가져오고 해당 경로에 현재 운영 체제에 대한 정확한 디렉터리 구분 문자가 있는지 확인합니다.Gets the canonicalized full path of the provided path and ensures it contains the correct directory separator characters for the current operating system.
string NormalizeDirectory(params string[] path)string NormalizeDirectory(params string[] path) 제공된 디렉터리의 정규화된 전체 경로를 가져오고 해당 경로에 현재 운영 체제에 대한 정확한 디렉터리 구분 문자와 후행 슬래시가 있는지 확인합니다.Gets the canonicalized full path of the provided directory and ensures it contains the correct directory separator characters for the current operating system while ensuring it has a trailing slash.
string EnsureTrailingSlash(string path)string EnsureTrailingSlash(string path) 제공된 경로에 후행 슬래시가 없으면 후행 슬래시를 추가합니다.If the given path doesn't have a trailing slash then add one. 경로가 빈 문자열이면 수정하지 않습니다.If the path is an empty string, does not modify it.
string GetPathOfFileAbove(string file, string startingDirectory)string GetPathOfFileAbove(string file, string startingDirectory) 현재 빌드 파일의 위치 또는 startingDirectory(지정된 경우)를 기준으로 파일을 검색합니다.Searches for a file based on the current build file's location, or based on startingDirectory, if specified.
GetDirectoryNameOfFileAbove(string startingDirectory, string fileName)GetDirectoryNameOfFileAbove(string startingDirectory, string fileName) 지정된 디렉터리 또는 해당 디렉터리 위 디렉터리 구조의 위치에서 파일을 찾습니다.Locate a file in either the directory specified or a location in the directory structure above that directory.
string MakeRelative(string basePath, string path)string MakeRelative(string basePath, string path) pathbasePath의 상대 경로로 설정합니다.Makes path relative to basePath. basePath는 절대 디렉터리여야 합니다.basePath must be an absolute directory. 상대 경로로 설정할 수 없는 path는 반환된 축자입니다.If path cannot be made relative, it is returned verbatim. Uri.MakeRelativeUri와 비슷합니다.Similar to Uri.MakeRelativeUri.
string ValueOrDefault(string conditionValue, string defaultValue)string ValueOrDefault(string conditionValue, string defaultValue) ‘conditionValue’ 매개 변수가 비어 있는 경우에만 ‘defaultValue’ 매개 변수로 문자열을 반환하고, 비어 있지 않으면 conditionValue 값을 반환합니다.Return the string in parameter 'defaultValue' only if parameter 'conditionValue' is empty, else, return the value conditionValue.

중첩 속성 함수Nested Property Functions

다음 예제에서 보여 주는 것처럼, 보다 복잡한 함수를 형성하기 위해 속성 함수를 결합할 수 있습니다.You can combine property functions to form more complex functions, as the following example shows.

$([MSBuild]::BitwiseAnd(32, $([System.IO.File]::GetAttributes(tempFile))))

이 예제에서는 FileAttributes 경로에 의해 지정된 파일의 Archive``tempFile 비트 값(32 또는 0)을 반환합니다.This example returns the value of the FileAttributesArchive bit (32 or 0) of the file given by the path tempFile. 열거형 데이터 값은 속성 함수 내에 이름으로 나타날 수 없습니다.Notice that enumerated data values cannot appear by name within property functions. 대신 숫자 값(32)을 사용해야 합니다.The numeric value (32) must be used instead.

메타데이터도 중첩 속성 함수에 나타날 수 있습니다.Metadata may also appear in nested property functions. 자세한 내용은 일괄 처리를 참조하세요.For more information, see Batching.

MSBuild DoesTaskHostExistMSBuild DoesTaskHostExist

MSBuild의 DoesTaskHostExist 속성 함수는 작업 호스트가 현재 지정된 런타임 및 아키텍처 값에 대해 설치되었는지 여부를 반환합니다.The DoesTaskHostExist property function in MSBuild returns whether a task host is currently installed for the specified runtime and architecture values.

이 속성 함수의 구문은 다음과 같습니다.This property function has the following syntax:

$[MSBuild]::DoesTaskHostExist(string theRuntime, string theArchitecture)  

MSBuild EnsureTrailingSlashMSBuild EnsureTrailingSlash

MSBuild의 EnsureTrailingSlash 속성 함수는 후행 슬래시(없는 경우)를 추가합니다.The EnsureTrailingSlash property function in MSBuild adds a trailing slash if one doesn't already exist.

이 속성 함수의 구문은 다음과 같습니다.This property function has the following syntax:

$([MSBuild]::EnsureTrailingSlash('$(PathProperty)'))

MSBuild GetDirectoryNameOfFileAboveMSBuild GetDirectoryNameOfFileAbove

MSBuild GetDirectoryNameOfFileAbove 속성 함수는 경로의 현재 디렉터리 위에 있는 디렉터리에서 파일을 찾습니다.The MSBuild GetDirectoryNameOfFileAbove property function looks for a file in the directories above the current directory in the path.

이 속성 함수의 구문은 다음과 같습니다.This property function has the following syntax:

$[MSBuild]::GetDirectoryNameOfFileAbove(string ThePath, string TheFile)  

다음 코드는 이 구문의 예제입니다.The following code is an example of this syntax.

<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), EnlistmentInfo.props))\EnlistmentInfo.props" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), EnlistmentInfo.props))' != '' " />  

MSBuild GetPathOfFileAboveMSBuild GetPathOfFileAbove

MSBuild의 GetPathOfFileAbove 속성 함수는 바로 앞에 오는 파일의 경로를 반환합니다.The GetPathOfFileAbove property function in MSBuild returns the path of the file immediately preceding this one. 다음을 호출하는 것과 기능적으로 동일합니다.It is functionally equivalent to calling

<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" />

이 속성 함수의 구문은 다음과 같습니다.This property function has the following syntax:

$([MSBuild]::GetPathOfFileAbove(dir.props)  

MSBuild GetRegistryValueMSBuild GetRegistryValue

MSBuild GetRegistryValue 속성 함수는 레지스트리 키 값을 반환합니다.The MSBuild GetRegistryValue property function returns the value of a registry key. 이 함수는 두 개의 인수(키 이름 및 값 이름)를 사용하고 레지스트리의 값을 반환합니다.This function takes two arguments, the key name and the value name, and returns the value from the registry. 값 이름을 지정하지 않은 경우 기본값이 반환됩니다.If you don't specify a value name, the default value is returned.

다음 예제에서는 이 함수를 사용하는 방법을 보여 줍니다.The following examples show how this function is used:

$([MSBuild]::GetRegistryValue(`HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0\Debugger`, ``))                                  // default value  
$([MSBuild]::GetRegistryValue(`HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0\Debugger`, `SymbolCacheDir`))  
$([MSBuild]::GetRegistryValue(`HKEY_LOCAL_MACHINE\SOFTWARE\(SampleName)`, `(SampleValue)`))             // parens in name and value  

MSBuild GetRegistryValueFromViewMSBuild GetRegistryValueFromView

MSBuild GetRegistryValueFromView 속성 함수는 레지스트리 키, 값 및 순서가 지정된 하나 이상의 레지스트리 보기를 고려하여 시스템 레지스트리 데이터를 가져옵니다.The MSBuild GetRegistryValueFromView property function gets system registry data given the registry key, value, and one or more ordered registry views. 키 및 값은 발견될 때까지 각 레지스트리 보기에서 순서대로 검색됩니다.The key and value are searched in each registry view in order until they are found.

이 속성 함수의 구문은 다음과 같습니다.The syntax for this property function is:

[MSBuild]::GetRegistryValueFromView(string keyName, string valueName, object defaultValue, params object[] views)[MSBuild]::GetRegistryValueFromView(string keyName, string valueName, object defaultValue, params object[] views)

Windows 64비트 운영 체제는 32비트 응용 프로그램에 대한 HKEY_LOCAL_MACHINE\SOFTWARE 레지스트리 보기를 제공하는 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node 레지스트리 키를 유지 관리합니다.The Windows 64-bit operating system maintains a HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node registry key that presents a HKEY_LOCAL_MACHINE\SOFTWARE registry view for 32-bit applications.

기본적으로 WOW64에서 실행되는 32비트 응용 프로그램은 32비트 레지스트리 보기에 액세스하고 64비트 응용 프로그램은 64비트 레지스트리 보기에 액세스합니다.By default, a 32-bit application running on WOW64 accesses the 32-bit registry view and a 64-bit application accesses the 64-bit registry view.

다음과 같은 레지스트리 보기를 사용할 수 있습니다.The following registry views are available:

레지스트리 보기Registry View 정의Definition
RegistryView.Registry32RegistryView.Registry32 32비트 응용 프로그램 레지스트리 보기입니다.The 32-bit application registry view.
RegistryView.Registry64RegistryView.Registry64 64비트 응용 프로그램 레지스트리 보기입니다.The 64-bit application registry view.
RegistryView.DefaultRegistryView.Default 응용 프로그램이 실행되고 있는 프로세스와 일치하는 레지스트리 보기입니다.The registry view that matches the process that the application is running on.

다음은 예제입니다.The following is an example.

$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Silverlight\v3.0\ReferenceAssemblies', 'SLRuntimeInstallPath', null, RegistryView.Registry64, RegistryView.Registry32))

는 ReferenceAssemblies 키의 SLRuntimeInstallPath 데이터를 가져오고, 먼저 64비트 레지스트리 보기에서 찾은 다음 32비트 레지스트리 보기에서 찾습니다.gets the SLRuntimeInstallPath data of the ReferenceAssemblies key, looking first in the 64-bit registry view and then in the 32-bit registry view.

MSBuild MakeRelativeMSBuild MakeRelative

MSBuild MakeRelative 속성 함수는 첫 번째 경로를 기준으로 하여 두 번째 경로의 상대 경로를 반환합니다.The MSBuild MakeRelative property function returns the relative path of the second path relative to first path. 각 경로는 파일 또는 폴더일 수 있습니다.Each path can be a file or folder.

이 속성 함수의 구문은 다음과 같습니다.This property function has the following syntax:

$[MSBuild]::MakeRelative($(FileOrFolderPath1), $(FileOrFolderPath2))  

다음 코드는 이 구문의 예제입니다.The following code is an example of this syntax.

<PropertyGroup>  
    <Path1>c:\users\</Path1>  
    <Path2>c:\users\username\</Path2>  
</PropertyGroup>  

<Target Name = "Go">  
    <Message Text ="$([MSBuild]::MakeRelative($(Path1), $(Path2)))" />  
    <Message Text ="$([MSBuild]::MakeRelative($(Path2), $(Path1)))" />  
</Target>  

<!--  
Output:  
   username\  
   ..\  
-->  

MSBuild ValueOrDefaultMSBuild ValueOrDefault

MSBuild ValueOrDefault 속성 함수는 첫 번째 인수가 null이거나 비어 있지 않은 한 첫 번째 인수를 반환합니다.The MSBuild ValueOrDefault property function returns the first argument, unless it's null or empty. 첫 번째 인수가 null이거나 비어 있으면 함수는 두 번째 인수를 반환합니다.If the first argument is null or empty, the function returns the second argument.

다음 예제에서는 이 함수를 사용하는 방법을 보여 줍니다.The following example shows how this function is used.

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  

    <PropertyGroup>  
        <Value1>$([MSBuild]::ValueOrDefault(`$(UndefinedValue)`, `a`))</Value1>  
        <Value2>$([MSBuild]::ValueOrDefault(`b`, `$(Value1)`))</Value2>  
    </PropertyGroup>  

    <Target Name="MyTarget">  
        <Message Text="Value1 = $(Value1)" />  
        <Message Text="Value2 = $(Value2)" />  
    </Target>  
</Project>  

<!--  
Output:   
  Value1 = a  
  Value2 = b  
-->  

참고 항목See Also

MSBuild 속성 MSBuild Properties
MSBuild 개요MSBuild Overview