속성 함수
.NET Framework 버전 4 및 4.5에서 속성 함수 MSBuild 스크립트를 실행 하려면 사용할 수 있습니다.속성이 나타나는 곳이면 어디에든지 속성 함수를 사용할 수 있습니다.작업과 달리 속성 함수는 대상 외부에 사용될 수 있으며 대상이 실행되기 전에 실행됩니다.
빌드 스크립트 내에서 MSBuild 작업을 사용하지 않고 시스템 시간을 읽고, 문자열을 비교하고, 정규식을 일치시키고, 기타 작업을 수행할 수 있습니다.MSBuild는 문자열을 숫자로, 숫자를 문자열로 변환하려고 하며 필요에 따라 기타 변환 작업을 수행합니다.
항목 내용
속성 함수 구문
문자열 속성 함수
정적 속성 함수
정적 속성에서 인스턴스 메서드 호출
MSBuild 속성 함수
중첩 속성 함수
MSBuild DoesTaskHostExist
MSBuild GetDirectoryNameOfFileAbove
MSBuild GetRegistryValue
MSBuild GetRegistryValueFromView
MSBuild MakeRelative
MSBuild ValueOrDefault
속성 함수 구문
속성 함수에는 세 가지가 있고, 각 함수에는 서로 다른 구문이 사용됩니다.
문자열(인스턴스) 속성 함수
정적 속성 함수
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]::BitwiseAnd(32, $([System.IO.File]::GetAttributes(tempFile))))
값을 반환 하는이 예제는 FileAttributesArchive 으로 경로가 지정 된 파일의 비트 (32 또는 0) tempFile. 열거된 데이터 값은 속성 함수 내에서 이름으로 나타날 수 없으며대신 숫자 값(32)을 사용해야 합니다.
메타데이터도 중첩 속성 함수에 나타날 수 있습니다.자세한 내용은 MSBuild 일괄 처리을 참조하십시오.
MSBuild DoesTaskHostExist
DoesTaskHostExist MSBuild 속성 함수 작업 호스트에 지정 된 런타임 및 아키텍처 값 현재 설치 되어 있는지 여부를 반환 합니다.
이 속성 함수의 구문은 다음과 같습니다.
$[MSBuild]::DoesTaskHostExist(string theRuntime, string theArchitecture)
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 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 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 MakeRelative
MSBuild MakeRelative 속성 함수는 두 번째 경로의 첫 번째 경로 기준으로 상대 경로 반환 합니다.각 경로 파일이 나 폴더를 수 있습니다.
이 속성 함수의 구문은 다음과 같습니다.
$[MSBuild]::MakeRelative($(FileOrFolderPath1), $(FileOrFolderPath2))
다음 코드에서는이 구문의 예입니다.
<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 ValueOrDefault
MSBuild ValueOrDefault 속성 함수 null 이거나 비어 있지 않으면 첫 번째 인수를 반환 합니다.첫 번째 인수가 null 이거나 비어 있으면 함수의 두 번째 인수를 반환 합니다.
다음 예제에서는이 함수를 사용 하는 방법을 보여 줍니다.
<Project ToolsVersion="4.0" xmlns="https://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
-->