プロパティ関数

.NET Framework Version 4 では、プロパティ関数を使用して MSBuild スクリプトを評価できます。 プロパティ関数は、プロパティを記述する場所で使用できます。 タスクとは異なり、プロパティ関数はターゲットの外部で使用でき、ターゲットの実行前に評価されます。

MSBuild タスクを使用しなくても、システム時刻の読み取り、文字列の比較、正規表現の照合、その他の処理をビルド スクリプト内で実行できます。 MSBuild では、文字列から数値、数値から文字列への変換を試み、必要に応じてその他の変換を行います。

プロパティ関数の構文

プロパティ関数には次の 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 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 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 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