プロパティ関数
.NET Framework Version 4および4.5では、MSBuildスクリプトを評価するために、プロパティ関数を使用できます。プロパティ関数は、プロパティを記述する場所で使用できます。タスクとは異なり、プロパティ関数はターゲットの外部で使用でき、ターゲットの実行前に評価されます。
MSBuild タスクを使用しなくても、システム時刻の読み取り、文字列の比較、正規表現の照合、その他の処理をビルド スクリプト内で実行できます。MSBuild では、文字列から数値、数値から文字列への変換を試み、必要に応じてその他の変換を行います。
このトピックの内容
プロパティ関数の構文
文字列プロパティ関数
静的プロパティ関数
静的プロパティのインスタンス メソッドの呼び出し
MSBuild プロパティ関数
入れ子になったプロパティ関数
MSBuild DoesTaskHostExist
MSBuild GetDirectoryNameOfFileAbove
MSBuild GetRegistryValue
MSBuild GetRegistryValueFromView
MSBuild MakeRelative
MSBuild ValueOrDefault
プロパティ関数の構文
プロパティ関数には次の 3 種類があります。各関数の構文はそれぞれ異なります。
文字列 (インスタンス) プロパティ関数
静的プロパティ関数
MSBuild プロパティ関数
文字列プロパティ関数
ビルド プロパティの値はすべて文字列値です。文字列 (インスタンス) メソッドを使用してプロパティ値を操作できます。たとえば、完全パスを表すビルド プロパティからドライブ名 (最初の 3 文字) を抽出できます。次のコードを使用します。
$(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))
たとえば、数値を持つ 2 つのプロパティを合計するには、次のコードを使用します。
$([MSBuild]::Add($(NumberOne), $(NumberTwo))
MSBuild プロパティ関数を次に示します。
関数のシグネチャ |
説明 |
---|---|
double Add(double a, double b) |
2 つの倍精度浮動小数点数の加算演算を行います。 |
long Add(long a, long b) |
2 つの長整数の加算演算を行います。 |
double Subtract(double a, double b) |
2 つの倍精度浮動小数点数の減算演算を行います。 |
long Subtract(long a, long b) |
2 つの長整数の減算演算を行います。 |
double Multiply(double a, double b) |
2 つの倍精度浮動小数点数の乗算演算を行います。 |
long Multiply(long a, long b) |
2 つの長整数の乗算演算を行います。 |
double Divide(double a, double b) |
2 つの倍精度浮動小数点数の除算演算を行います。 |
long Divide(long a, long b) |
2 つの長整数の除算演算を行います。 |
double Modulo(double a, double b) |
2 つの倍精度浮動小数点数の剰余演算を行います。 |
long Modulo(long a, long b) |
2 つの長整数の剰余演算を行います。 |
string Escape(string unescaped) |
MSBuild エスケープ ルールに従って文字列をエスケープします。 |
string Unescape(string escaped) |
MSBuild エスケープ ルールに従って文字列をエスケープ解除します。 |
int BitwiseOr(int first, int second) |
1 番目と 2 番目の値に対してビットごとの OR 演算 (first | second) を実行します。 |
int BitwiseAnd(int first, int second) |
1 番目と 2 番目の値に対してビットごとの AND 演算 (first & second) を実行します。 |
int BitwiseXor(int first, int second) |
1 番目と 2 番目の値に対してビットごとの XOR 演算 (first ^ second) を実行します。 |
int BitwiseNot(int first) |
ビットごとの NOT 演算 (~first) を実行します。 |
入れ子になったプロパティ関数
次の例に示すように、複雑な関数を作成するには、プロパティ関数を結合できます。
$([MSBuild]::BitwiseAnd(32, $([System.IO.File]::GetAttributes(tempFile))))
この例では tempFileパスで指定したファイルの FileAttributesArchive のビットの値 (32または0) 返します。プロパティ関数内で列挙データ値を名前で指定することはできません。代わりに数値 (32) を使用する必要があります。
入れ子になったプロパティ関数でメタデータを使用することもできます。詳細については、「MSBuild バッチ」を参照してください。
MSBuild DoesTaskHostExist
MSBuildのプロパティ関数は DoesTaskHostExist のタスクでホストが指定したランタイムとアーキテクチャの値の現在インストールされているかどうかを返します。
このプロパティ関数は、次の構文があります:
$[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 プロパティ関数は、レジストリ キーの値を返します。この関数は2個の引数 (キー名と値の名前を受け取り、レジストリの値を返します。値の名前を指定しない場合、既定値が返されます。
この関数の使用方法を次の例に示します。
$([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
MSBuild の GetRegistryValueFromView プロパティ関数は、レジストリ キー、値、および 1 つ以上の順序付けられたレジストリ ビューからシステム レジストリ データを取得します。キーと値が見つかるまで、各レジストリ ビューが順番に検索されます。
このプロパティ関数の構文を次に示します。
[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 のパスに関連して2番目の相対パスを返します。各パスは、ファイルまたはフォルダーのいずれかです。
このプロパティ関数は、次の構文があります:
$[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
の ValueOrDefault MSBuildのプロパティ関数はnullまたは空でない場合、最初の引数を返します。最初の引数がnullまたは空の場合、関数は2番目の引数を返します。
この関数の使用方法を次の例に示します。
<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
-->