次の方法で共有


プロパティ関数

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

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

このトピックの内容

  • プロパティ関数の構文

    • 文字列プロパティ関数

    • 静的プロパティ関数

    • 静的プロパティのインスタンス メソッドの呼び出し

    • MSBuild プロパティ関数

  • 入れ子になったプロパティ関数

  • MSBuild DoesTaskHostExist

  • MSBuild GetDirectoryNameOfFileAbove

  • MSBuild GetRegistryValue

  • MSBuild GetRegistryValueFromView

  • MSBuild MakeRelative

  • MSBuild ValueOrDefault

プロパティ関数の構文

プロパティ関数には次の 3 種類があります。各関数の構文はそれぞれ異なります。

  • 文字列 (インスタンス) プロパティ関数

  • 静的プロパティ関数

  • MSBuild プロパティ関数

Dd633440.collapse_all(ja-jp,VS.110).gif文字列プロパティ関数

ビルド プロパティの値はすべて文字列値です。文字列 (インスタンス) メソッドを使用してプロパティ値を操作できます。たとえば、完全パスを表すビルド プロパティからドライブ名 (最初の 3 文字) を抽出できます。次のコードを使用します。

$(ProjectOutputFolder.Substring(0,3))

Dd633440.collapse_all(ja-jp,VS.110).gif静的プロパティ関数

ビルド スクリプトでは、さまざまなシステム クラスの静的プロパティと静的メソッドにアクセスできます。静的プロパティの値を取得するには、次の構文を使用します。ここで、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

Dd633440.collapse_all(ja-jp,VS.110).gif静的プロパティのインスタンス メソッドの呼び出し

オブジェクト インスタンスを返す静的プロパティにアクセスする場合は、そのオブジェクトのインスタンス メソッドを呼び出すことができます。インスタンス メソッドを呼び出すには、次の構文を使用します。ここで、Class はシステム クラスの名前、Property はプロパティの名前、Method はメソッドの名前、(Parameters) はメソッドのパラメーター リストです。

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

クラスの名前は、名前空間を含む完全修飾名であることが必要です。

たとえば、ビルド プロパティを今日の日付に設定するには、次のコードを使用します。

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

Dd633440.collapse_all(ja-jp,VS.110).gifMSBuild プロパティ関数

ビルド内のさまざまな静的メソッドにアクセスして、算術演算、ビットごとの論理演算、およびエスケープ文字を使用できます。これらのメソッドにアクセスするには、次の構文を使用します。ここで、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
-->

参照

概念

MSBuild プロパティ

その他の技術情報

MSBuild