다음을 통해 공유


속성 함수

.NET Framework 버전 4에서는 속성 함수를 사용하여 MSBuild 스크립트를 실행할 수 있습니다. 속성이 나타나는 곳이면 어디에든지 속성 함수를 사용할 수 있습니다. 작업과 달리 속성 함수는 대상 외부에 사용될 수 있으며 대상이 실행되기 전에 실행됩니다.

빌드 스크립트 내에서 MSBuild 작업을 사용하지 않고 시스템 시간을 읽고, 문자열을 비교하고, 정규식을 일치시키고, 기타 작업을 수행할 수 있습니다. MSBuild는 문자열을 숫자로, 숫자를 문자열로 변환하려고 하며 필요에 따라 기타 변환 작업을 수행합니다.

속성 함수 구문

속성 함수에는 세 가지가 있고, 각 함수에는 서로 다른 구문이 사용됩니다.

  • 문자열(인스턴스) 속성 함수

  • 정적 속성 함수

  • MSBuild 속성 함수

문자열 속성 함수

모든 빌드 속성 값이 단순한 문자열 값입니다. 문자열(인스턴스) 메서드를 모든 속성 값에 사용할 수 있습니다. 예를 들어 다음 코드를 사용하여 전체 경로를 나타내는 빌드 속성에서 드라이브 이름(처음 세 문자)을 추출할 수 있습니다.

$(ProjectOutputFolder.Substring(0,3))

정적 속성 함수

빌드 스크립트에서 많은 시스템 클래스의 정적 속성 및 메서드에 액세스할 수 있습니다. 정적 속성의 값을 가져오려면 다음 구문을 사용합니다. 여기서 Class는 시스템 클래스의 이름이고, Property는 속성의 이름입니다.

$([Class]::Property)

예를 들어 다음 코드를 사용하여 빌드 속성을 현재 날짜 및 시간으로 설정할 수 있습니다.

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

정적 메서드를 호출하려면 다음 구문을 사용합니다. 여기서 Class는 시스템 클래스의 이름이고, Method는 메서드의 이름이고, (Parameters)는 메서드의 매개 변수 목록입니다.

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

예를 들어 빌드 속성을 새 GUID로 설정하려면 다음 스크립트를 사용할 수 있습니다.

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

정적 속성 함수에서는 다음 시스템 클래스의 모든 정적 메서드 또는 속성을 사용할 수 있습니다.

  • System.Byte

  • System.Char

  • System.Convert

  • System.DateTime

  • System.Decimal

  • System.Double

  • System.Enum

  • System.Guid

  • System.Int16

  • System.Int32

  • System.Int64

  • System.IO.Path

  • System.Math

  • System.UInt16

  • System.UInt32

  • System.UInt64

  • System.SByte

  • System.Single

  • System.String

  • System.StringComparer

  • System.TimeSpan

  • System.Text.RegularExpressions.Regex

  • Microsoft.Build.Utilities.ToolLocationHelper

다음 정적 메서드 및 속성을 사용할 수도 있습니다.

  • System.Environment::CommandLine

  • System.Environment::ExpandEnvironmentVariables

  • System.Environment::GetEnvironmentVariable

  • System.Environment::GetEnvironmentVariables

  • System.Environment::GetFolderPath

  • System.Environment::GetLogicalDrives

  • System.IO.Directory::GetDirectories

  • System.IO.Directory::GetFiles

  • System.IO.Directory::GetLastAccessTime

  • System.IO.Directory::GetLastWriteTime

  • System.IO.Directory::GetParent

  • System.IO.File::Exists

  • System.IO.File::GetCreationTime

  • System.IO.File::GetAttributes

  • System.IO.File::GetLastAccessTime

  • System.IO.File::GetLastWriteTime

  • System.IO.File::ReadAllText

정적 속성에서 인스턴스 메서드 호출

개체 인스턴스를 반환하는 정적 속성에 액세스하는 경우 해당 개체의 인스턴스 메서드를 호출할 수 있습니다. 인스턴스 메서드를 호출하려면 다음 구문을 사용합니다. 여기서 Class는 시스템 클래스의 이름이고, Property는 속성의 이름이고, Method는 메서드의 이름이고, (Parameters)는 메서드의 매개 변수 목록입니다.

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

클래스의 이름은 네임스페이스를 사용하여 정규화되어야 합니다.

예를 들어 다음 코드를 사용하여 빌드 속성을 현재 오늘 날짜로 설정할 수 있습니다.

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

MSBuild 속성 함수

빌드의 여러 정적 메서드에 액세스하여 산술, 비트 논리 및 이스케이프 문자 지원을 제공할 수 있습니다. 다음 구문을 사용하여 이러한 메서드에 액세스합니다. 여기서 Method는 메서드의 이름이고, Parameters는 메서드의 매개 변수 목록입니다.

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

예를 들어 숫자 값이 지정된 두 속성을 서로 더하려면 다음 코드를 사용합니다.

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

MSBuild 속성 함수는 다음과 같습니다.

함수 시그니처

설명

double Add(double a, double b)

두 double 값을 더합니다.

long Add(long a, long b)

두 long 값을 더합니다.

double Subtract(double a, double b)

두 double 값을 뺍니다.

long Subtract(long a, long b)

두 long 값을 뺍니다.

double Multiply(double a, double b)

두 double 값을 곱합니다.

long Multiply(long a, long b)

두 long 값을 곱합니다.

double Divide(double a, double b)

두 double 값을 나눕니다.

long Divide(long a, long b)

두 long 값을 나눕니다.

double Modulo(double a, double b)

두 double 값을 나눈 나머지를 구합니다.

long Modulo(long a, long b)

두 long 값을 나눈 나머지를 구합니다.

string Escape(이스케이프되지 않은 문자열)

MSBuild 이스케이프 규칙에 따라 문자열을 이스케이프합니다.

string Unescape(이스케이프된 문자열)

MSBuild 이스케이프 규칙에 따라 문자열을 이스케이프 해제합니다.

int BitwiseOr(첫 번째 int, 두 번째 int)

첫 번째 및 두 번째에서 비트 OR을 수행합니다(첫 번째 | 두 번째).

int BitwiseAnd(첫 번째 int, 두 번째 int)

첫 번째 및 두 번째에서 비트 AND를 수행합니다(첫 번째 & 두 번째).

int BitwiseXor(첫 번째 int, 두 번째 int)

첫 번째 및 두 번째에서 비트 XOR을 수행합니다(첫 번째 ^ 두 번째).

int BitwiseNot(첫 번째 int)

비트 NOT을 수행합니다(~첫 번째).

MSBuild GetRegistryValueFromView

The MSBuild GetRegistryValueFromView 속성 함수는 레지스트리 키, 값 및 하나 이상의 정렬된 레지스트리 뷰가 있으면 시스템 레지스트리 데이터를 가져옵니다. 키와 값은 각 레지스트리 뷰에서 발견될 때까지 순서대로 검색됩니다.

이 속성 함수의 구문은 다음과 같습니다.

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

Windows 64비트 운영 체제에서는 32비트 응용 프로그램을 위해 HKEY_LOCAL_MACHINE\SOFTWARE 레지스트리 뷰를 제공하는 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node 레지스트리 키를 유지합니다.

기본적으로 WOW64에서 실행되는 32비트 응용 프로그램은 32비트 레지스트리 뷰에 액세스하고 64비트 응용 프로그램은 64비트 레지스트리 뷰에 액세스합니다.

사용 가능한 레지스트리 뷰는 다음과 같습니다.

레지스트리 뷰

정의

RegistryView.Registry32

32비트 응용 프로그램 레지스트리 뷰

RegistryView.Registry64

64비트 응용 프로그램 레지스트리 뷰

RegistryView.Default

응용 프로그램이 실행 중인 프로세스와 일치하는 레지스트리 뷰

다음 예제를 참조하십시오.

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

이 예제에서는 64비트 레지스트리 뷰와 32비트 레지스트리 뷰를 차례로 검색하여 ReferenceAssemblies 키의 SLRuntimeInstallPath 데이터를 가져옵니다.

MSBuild GetRegistryValue

MSBuild GetRegistryValue 속성 함수는 레지스트리 키의 값을 반환합니다. 이 함수는 키 이름과 값 이름의 두 인수를 사용합니다. 레지스트리에서 값을 반환합니다. 값 이름을 지정하지 않으면 기본값이 반환됩니다.

다음 예제에서는 이 함수를 사용하는 방법을 보여 줍니다.

$([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 GetDirectoryNameOfFileAbove

MSBuild GetDirectoryNameOfFileAbove 속성 함수는 경로의 현재 디렉터리에 대한 디렉터리에서 파일을 찾습니다.

이 속성 함수의 구문은 다음과 같습니다.

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

예를 들면 다음과 같습니다.

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

중첩 속성 함수

속성 함수를 결합하여 보다 복잡한 함수를 구성할 수 있습니다. 다음 예제를 참조하십시오.

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

위 예제에서는 tempFile 경로로 지정된 파일의 FileAttributes Archive 비트 값(32 또는 0)을 반환합니다. 열거된 데이터 값은 속성 함수 내에서 이름으로 나타날 수 없으며 대신 숫자 값(32)을 사용해야 합니다.

메타데이터도 중첩 속성 함수에 나타날 수 있습니다. 자세한 내용은 MSBuild 일괄 처리를 참조하십시오.

참고 항목

개념

MSBuild 속성

기타 리소스

MSBuild