プロパティ関数Property Functions

.NET Framework のバージョン 4 と 4.5 では、プロパティ関数を使用して MSBuild スクリプトを評価できます。In the .NET Framework versions 4 and 4.5, property functions can be used to evaluate MSBuild scripts. プロパティ関数は、プロパティが表示される場所ならどこでも使用できます。Property functions can be used wherever properties appear. タスクとは異なり、プロパティ関数はターゲットの外側でも使用でき、ターゲットが実行される前に評価されます。Unlike tasks, property functions can be used outside of targets, and are evaluated before any target runs.

MSBuild タスクを使用しなくても、システム時刻の読み取り、文字列の比較、正規表現の照合、その他の処理をビルド スクリプト内で実行できます。Without using MSBuild tasks, you can read the system time, compare strings, match regular expressions, and perform other actions in your build script. MSBuild は、文字列を数値に、数値を文字列に変換しようと試みます。また、必要に応じて他の変換も実行します。MSBuild will try to convert string to number and number to string, and make other conversions as required.

プロパティ関数の構文Property Function Syntax

次に 3 種類のプロパティ関数を示します。各関数には異なる構文があります。These are three kinds of property functions; each function has a different syntax:

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

  • 静的プロパティ関数Static property functions

  • MSBuild プロパティ関数MSBuild property functions

文字列プロパティ関数String Property Functions

ビルド プロパティの値はすべて文字列値です。All build property values are just string values. 文字列 (インスタンス) メソッドを使用してプロパティ値を操作できます。You can use string (instance) methods to operate on any property value. たとえば、次のコードを使用して、完全パスを表すビルド プロパティからドライブ名 (最初の 3 文字) を抽出できます。For example, you can extract the drive name (the first three characters) from a build property that represents a full path by using this code:

$(ProjectOutputFolder.Substring(0,3))

静的プロパティ関数Static Property Functions

ビルド スクリプトで、各種システム クラスの静的プロパティおよびメソッドにアクセスできます。In your build script, you can access the static properties and methods of many system classes. 静的プロパティの値を取得するには、次の構文を使用します。ここで、Class はシステム クラスの名前、Property はプロパティの名前です。To get the value of a static property, use the following syntax, where Class is the name of the system class and Property is the name of the property.

$([Class]::Property)

たとえば、次のコードを使用して、ビルド プロパティを現在の日付と時刻に設定します。For example, you can use the following code to set a build property to the current date and time.

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

静的メソッドを呼び出すには、次の構文を使用します。ここで、Class はシステム クラスの名前、Method はメソッドの名前、(Parameters) はメソッドのパラメーター リストです。To call a static method, use the following syntax, where Class is the name of the system class, Method is the name of the method, and (Parameters) is the parameter list for the method:

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

たとえば、ビルド プロパティを新しい GUID に設定するには、次のスクリプトを使用できます。For example, to set a build property to a new GUID, you can use this script:

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

静的プロパティ関数では、次のシステム クラスの任意の静的メソッドやプロパティを使用できます。In static property functions, you can use any static method or property of these system classes:

  • System.ByteSystem.Byte

  • System.CharSystem.Char

  • System.ConvertSystem.Convert

  • System.DateTimeSystem.DateTime

  • System.DecimalSystem.Decimal

  • System.DoubleSystem.Double

  • System.EnumSystem.Enum

  • System.GuidSystem.Guid

  • System.Int16System.Int16

  • System.Int32System.Int32

  • System.Int64System.Int64

  • System.IO.PathSystem.IO.Path

  • System.MathSystem.Math

  • System.Runtime.InteropServices.OSPlatformSystem.Runtime.InteropServices.OSPlatform

  • System.Runtime.InteropServices.RuntimeInformationSystem.Runtime.InteropServices.RuntimeInformation

  • System.UInt16System.UInt16

  • System.UInt32System.UInt32

  • System.UInt64System.UInt64

  • System.SByteSystem.SByte

  • System.SingleSystem.Single

  • System.StringSystem.String

  • System.StringComparerSystem.StringComparer

  • System.TimeSpanSystem.TimeSpan

  • System.Text.RegularExpressions.RegexSystem.Text.RegularExpressions.Regex

  • Microsoft.Build.Utilities.ToolLocationHelperMicrosoft.Build.Utilities.ToolLocationHelper

    さらに、次の静的メソッドおよびプロパティを使用できます。In addition, you can use the following static methods and properties:

  • System.Environment::CommandLineSystem.Environment::CommandLine

  • System.Environment::ExpandEnvironmentVariablesSystem.Environment::ExpandEnvironmentVariables

  • System.Environment::GetEnvironmentVariableSystem.Environment::GetEnvironmentVariable

  • System.Environment::GetEnvironmentVariablesSystem.Environment::GetEnvironmentVariables

  • System.Environment::GetFolderPathSystem.Environment::GetFolderPath

  • System.Environment::GetLogicalDrivesSystem.Environment::GetLogicalDrives

  • System.IO.Directory::GetDirectoriesSystem.IO.Directory::GetDirectories

  • System.IO.Directory::GetFilesSystem.IO.Directory::GetFiles

  • System.IO.Directory::GetLastAccessTimeSystem.IO.Directory::GetLastAccessTime

  • System.IO.Directory::GetLastWriteTimeSystem.IO.Directory::GetLastWriteTime

  • System.IO.Directory::GetParentSystem.IO.Directory::GetParent

  • System.IO.File::ExistsSystem.IO.File::Exists

  • System.IO.File::GetCreationTimeSystem.IO.File::GetCreationTime

  • System.IO.File::GetAttributesSystem.IO.File::GetAttributes

  • System.IO.File::GetLastAccessTimeSystem.IO.File::GetLastAccessTime

  • System.IO.File::GetLastWriteTimeSystem.IO.File::GetLastWriteTime

  • System.IO.File::ReadAllTextSystem.IO.File::ReadAllText

静的プロパティ上でインスタンス メソッドを呼び出すCalling Instance Methods on Static Properties

オブジェクト インスタンスを返す静的プロパティにアクセスすると、そのオブジェクトのインスタンス メソッドを呼び出すことができます。If you access a static property that returns an object instance, you can invoke the instance methods of that object. インスタンス メソッドを呼び出すには、次の構文を使用します。ここで、Class はシステム クラスの名前、Property はプロパティの名前、Method はメソッドの名前、(Parameters) はメソッドのパラメーター リストです。To invoke an instance method, use the following syntax, where Class is the name of the system class, Property is the name of the property, Method is the name of the method, and (Parameters) is the parameter list for the method:

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

クラスの名前は、名前空間を使用して完全修飾する必要があります。The name of the class must be fully qualified with the namespace.

たとえば、次のコードを使用して、ビルド プロパティを現在の日付 (今日) に設定します。For example, you can use the following code to set a build property to the current date today.

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

MSBuild プロパティ関数MSBuild Property Functions

ビルド内のいくつかの静的メソッドにアクセスすると、算術、ビットごとの論理、およびエスケープ文字のサポートが提供されます。Several static methods in your build can be accessed to provide arithmetic, bitwise logical, and escape character support. 次の構文を使用して、これらのメソッドにアクセスします。ここで、Method はメソッドの名前、Parameters はメソッドのパラメーター リストです。You access these methods by using the following syntax, where Method is the name of the method and Parameters is the parameter list for the method.

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

たとえば、数値を持つ 2 つのプロパティを合計するには、次のコードを使用します。For example, to add together two properties that have numeric values, use the following code.

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

次に MSBuild プロパティ関数の一覧を示します。Here is a list of MSBuild property functions:

関数シグネチャFunction Signature 説明Description
double Add(double a, double b)double Add(double a, double b) 2 個の倍精度浮動小数点数を加算します。Add two doubles.
long Add(long a, long b)long Add(long a, long b) 2 個の長整数を加算します。Add two longs.
double Subtract(double a, double b)double Subtract(double a, double b) 2 個の倍精度浮動小数点数を減算します。Subtract two doubles.
long Subtract(long a, long b)long Subtract(long a, long b) 2 個の長整数を減算します。Subtract two longs.
double Multiply(double a, double b)double Multiply(double a, double b) 2 個の倍精度浮動小数点数を乗算します。Multiply two doubles.
long Multiply(long a, long b)long Multiply(long a, long b) 2 個の長整数を乗算します。Multiply two longs.
double Divide(double a, double b)double Divide(double a, double b) 2 個の倍精度浮動小数点数を除算します。Divide two doubles.
long Divide(long a, long b)long Divide(long a, long b) 2 個の長整数を除算します。Divide two longs.
double Modulo(double a, double b)double Modulo(double a, double b) 2 個の倍精度浮動小数点数を剰余します。Modulo two doubles.
long Modulo(long a, long b)long Modulo(long a, long b) 2 個の長整数を剰余します。Modulo two longs.
string Escape(string unescaped)string Escape(string unescaped) MSBuild のエスケープ ルールに従って文字列をエスケープします。Escape the string according to MSBuild escaping rules.
string Unescape(string escaped)string Unescape(string escaped) MSBuild のエスケープ ルールに従って文字列をエスケープ解除します。Unescape the string according to MSBuild escaping rules.
int BitwiseOr(int first, int second)int BitwiseOr(int first, int second) 1 番目と 2 番目 (first | second) でビットごとの OR を実行します。Perform a bitwise OR on the first and second (first | second).
int BitwiseAnd(int first, int second)int BitwiseAnd(int first, int second) 1 番目と 2 番目 (first & second) でビットごとの AND を実行します。Perform a bitwise AND on the first and second (first & second).
int BitwiseXor(int first, int second)int BitwiseXor(int first, int second) 1 番目と 2 番目 (first ^ second) でビットごとの XOR を実行します。Perform a bitwise XOR on the first and second (first ^ second).
int BitwiseNot(int first)int BitwiseNot(int first) ビットごとの NOT (~first) を実行します。Perform a bitwise NOT (~first).
bool IsOsPlatform(string platformString)bool IsOsPlatform(string platformString) 現在の OS プラットフォームが platformString かどうかを指定します。Specify whether the current OS platform is platformString. platformStringOSPlatform のメンバーである必要があります。platformString must be a member of OSPlatform.
bool IsOSUnixLikebool IsOSUnixLike 現在の OS が Unix システムの場合は true です。True if current OS is a Unix system.
string NormalizePath(params string[] path)string NormalizePath(params string[] path) 指定されたパスの正規化された完全なパスを取得し、現在のオペレーティング システムの適切なディレクトリ区切り文字が含まれていることを確認します。Gets the canonicalized full path of the provided path and ensures it contains the correct directory separator characters for the current operating system.
string NormalizeDirectory(params string[] path)string NormalizeDirectory(params string[] path) 指定されたディレクトリの正規化された完全なパスを取得し、現在のオペレーティング システムの適切なディレクトリ区切り文字が含まれていて、末尾にスラッシュがあることを確認します。Gets the canonicalized full path of the provided directory and ensures it contains the correct directory separator characters for the current operating system while ensuring it has a trailing slash.
string EnsureTrailingSlash(string path)string EnsureTrailingSlash(string path) 指定されたパスの末尾にスラッシュがない場合は、追加します。If the given path doesn't have a trailing slash then add one. パスが空の文字列の場合は変更されません。If the path is an empty string, does not modify it.
string GetPathOfFileAbove(string file, string startingDirectory)string GetPathOfFileAbove(string file, string startingDirectory) 現在のビルド ファイルの場所に基づいて、または startingDirectory に基づいて (指定されている場合)、ファイルを検索します。Searches for a file based on the current build file's location, or based on startingDirectory, if specified.
GetDirectoryNameOfFileAbove(string startingDirectory, string fileName)GetDirectoryNameOfFileAbove(string startingDirectory, string fileName) 指定されたディレクトリまたはそのディレクトリの上のディレクトリ構造内の場所でファイルを見つけます。Locate a file in either the directory specified or a location in the directory structure above that directory.
string MakeRelative(string basePath, string path)string MakeRelative(string basePath, string path) pathbasePath に対して相対的にします。Makes path relative to basePath. basePath は絶対ディレクトリである必要があります。basePath must be an absolute directory. path を相対にできない場合、verbatim が返されます。If path cannot be made relative, it is returned verbatim. Uri.MakeRelativeUri と似ています。Similar to Uri.MakeRelativeUri.
string ValueOrDefault(string conditionValue, string defaultValue)string ValueOrDefault(string conditionValue, string defaultValue) パラメーター 'conditionValue' が空の場合にのみ、パラメーター 'defaultValue' に文字列を返します。それ以外の場合は、値 conditionValue を返します。Return the string in parameter 'defaultValue' only if parameter 'conditionValue' is empty, else, return the value conditionValue.

入れ子になったプロパティ関数Nested Property Functions

次の例が示すように、プロパティ関数を組み合わせてより複雑な関数を形成します。You can combine property functions to form more complex functions, as the following example shows.

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

この例では、FileAttributes というパスにより与えられたファイルの Archive``tempFile ビット (32 または 0) の値が返されます。This example returns the value of the FileAttributesArchive bit (32 or 0) of the file given by the path tempFile. 列挙データ値はプロパティ関数内で名前によって表示できないことに注意してください。Notice that enumerated data values cannot appear by name within property functions. 代わりに数値 (32) を使用する必要があります。The numeric value (32) must be used instead.

入れ子になったプロパティ関数では、メタデータも表示される可能性があります。Metadata may also appear in nested property functions. 詳細については、「MSBuild バッチ」をご覧ください。For more information, see Batching.

MSBuild の DoesTaskHostExistMSBuild DoesTaskHostExist

MSBuild の DoesTaskHostExist プロパティ関数は、指定したランタイムとアーキテクチャ値に対してタスク ホストが現在インストールされているかどうかを返します。The DoesTaskHostExist property function in MSBuild returns whether a task host is currently installed for the specified runtime and architecture values.

このプロパティ関数には次の構文があります。This property function has the following syntax:

$[MSBuild]::DoesTaskHostExist(string theRuntime, string theArchitecture)  

MSBuild EnsureTrailingSlashMSBuild EnsureTrailingSlash

MSBuild の EnsureTrailingSlash プロパティ関数は、末尾のスラッシュがないときにそれを追加します。The EnsureTrailingSlash property function in MSBuild adds a trailing slash if one doesn't already exist.

このプロパティ関数には次の構文があります。This property function has the following syntax:

$([MSBuild]::EnsureTrailingSlash('$(PathProperty)'))

MSBuild の GetDirectoryNameOfFileAboveMSBuild GetDirectoryNameOfFileAbove

MSBuild の GetDirectoryNameOfFileAbove プロパティ関数は、パスの現在のディレクトリの上にあるディレクトリ内でファイルを探します。The MSBuild GetDirectoryNameOfFileAbove property function looks for a file in the directories above the current directory in the path.

このプロパティ関数には次の構文があります。This property function has the following syntax:

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

次のコードはこの構文の例です。The following code is an example of this syntax.

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

MSBuild GetPathOfFileAboveMSBuild GetPathOfFileAbove

MSBuild の GetPathOfFileAbove プロパティ関数は、直前のファイルのパスを返します。The GetPathOfFileAbove property function in MSBuild returns the path of the file immediately preceding this one. 呼び出しと同じ機能ですIt is functionally equivalent to calling

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

このプロパティ関数には次の構文があります。This property function has the following syntax:

$([MSBuild]::GetPathOfFileAbove(dir.props)  

MSBuild の GetRegistryValueMSBuild GetRegistryValue

MSBuild の GetRegistryValue プロパティ関数は、レジストリ キーの値を返します。The MSBuild GetRegistryValue property function returns the value of a registry key. この関数は、キー名と値の名前という 2 つの引数を取り、レジストリの値を返します。This function takes two arguments, the key name and the value name, and returns the value from the registry. 値の名前を指定しない場合は、既定値が返されます。If you don't specify a value name, the default value is returned.

この関数を使用する方法を次の例に示します。The following examples show how this function is used:

$([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 の GetRegistryValueFromViewMSBuild GetRegistryValueFromView

MSBuild の GetRegistryValueFromView プロパティ関数は、レジストリ キー、値、および 1 つ以上の順序づけられたレジストリ ビューを含むシステム レジストリ データを取得します。The MSBuild GetRegistryValueFromView property function gets system registry data given the registry key, value, and one or more ordered registry views. キーと値は見つかるまで各レジストリ ビューで順番に検索されます。The key and value are searched in each registry view in order until they are found.

このプロパティ関数の構文を次に示します。The syntax for this property function is:

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

Windows 64 ビット オペレーティング システムは、HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node というレジストリ キーを保持しています。このキーは、32 ビット アプリケーションに対して HKEY_LOCAL_MACHINE\SOFTWARE というレジストリ ビューを提供します。The Windows 64-bit operating system maintains a HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node registry key that presents a HKEY_LOCAL_MACHINE\SOFTWARE registry view for 32-bit applications.

既定では、WOW64 で実行されている 32 ビット アプリケーションは 32 ビットのレジストリ ビューにアクセスし、64 ビット アプリケーションは 64 ビットのレジストリ ビューにアクセスします。By default, a 32-bit application running on WOW64 accesses the 32-bit registry view and a 64-bit application accesses the 64-bit registry view.

次のレジストリ ビューが使用できます。The following registry views are available:

レジストリ ビューRegistry View 定義Definition
RegistryView.Registry32RegistryView.Registry32 32 ビット アプリケーションのレジストリ ビュー。The 32-bit application registry view.
RegistryView.Registry64RegistryView.Registry64 64 ビット アプリケーションのレジストリ ビュー。The 64-bit application registry view.
RegistryView.DefaultRegistryView.Default アプリケーションが実行されているプロセスに対応するレジストリ ビュー。The registry view that matches the process that the application is running on.

次に例を示します。The following is an example.

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

は、最初に 64 ビットのレジストリ ビュー、次に 32 ビットのレジストリ ビューを参照して、ReferenceAssemblies キーの SLRuntimeInstallPath データを取得します。gets the SLRuntimeInstallPath data of the ReferenceAssemblies key, looking first in the 64-bit registry view and then in the 32-bit registry view.

MSBuild の MakeRelativeMSBuild MakeRelative

MSBuild の MakeRelative プロパティ関数は、最初のパスに対する 2 番目のパスの相対パスを返します。The MSBuild MakeRelative property function returns the relative path of the second path relative to first path. 各パスはファイルまたはフォルダです。Each path can be a file or folder.

このプロパティ関数には次の構文があります。This property function has the following syntax:

$[MSBuild]::MakeRelative($(FileOrFolderPath1), $(FileOrFolderPath2))  

次のコードはこの構文の例です。The following code is an example of this syntax.

<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 の ValueOrDefaultMSBuild ValueOrDefault

MSBuild の ValueOrDefault プロパティ関数は、null または空でない限り、最初の引数を返します。The MSBuild ValueOrDefault property function returns the first argument, unless it's null or empty. 最初の引数が null または空の場合、関数は 2 番目の引数を返します。If the first argument is null or empty, the function returns the second argument.

この関数を使用する方法を次の例に示します。The following example shows how this function is used.

<Project ToolsVersion="4.0" xmlns="http://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  
-->  

関連項目See Also

MSBuild プロパティ MSBuild Properties
MSBuild の概要MSBuild Overview