Eigenschaftenfunktionen
In .NET Framework, Versionen 4 und 4.5, können Eigenschaftenfunktionen zur Auswertung von MSBuild-Skripts verwendet werden. Eigenschaftenfunktionen können immer dann verwendet werden, wenn Eigenschaften vorhanden sind. Im Gegensatz zu Aufgaben können Eigenschaftenfunktionen außerhalb von Zielen verwendet werden, und sie werden ausgewertet, bevor Ziele ausgeführt werden.
Sie können die Systemzeit lesen, Zeichenfolgen vergleichen, reguläre Ausdrücke abgleichen und viele weitere Aktionen im Buildskript ausführen, ohne MSBuild-Aufgaben zu verwenden. MSBuild versucht, eine Zeichenfolge in eine Zahl und eine Zahl in eine Zeichenfolge zu konvertieren und nimmt je nach Bedarf andere Konvertierungen vor.
In diesem Thema:
Property Function Syntax
String Property Functions
Static Property Functions
Calling Instance Methods on Static Properties
MSBuild Property Functions
Nested Property Functions
MSBuild DoesTaskHostExist
MSBuild GetDirectoryNameOfFileAbove
MSBuild GetRegistryValue
MSBuild GetRegistryValueFromView
MSBuild MakeRelative
MSBuild ValueOrDefault
Syntax einer Eigenschaftenfunktion
Nachfolgend sehen Sie drei Arten von Eigenschaftenfunktionen; jede Funktion hat eine andere Syntax:
Zeichenfolgen-(Instanz-)Eigenschaftenfunktionen
Statische Eigenschaftenfunktionen
MSBuild-Eigenschaftenfunktionen
Zeichenfolgen-Eigenschaftenfunktionen
Alle Buildeigenschaftswerte sind lediglich Zeichenfolgenwerte. Sie können Zeichenfolgen-(Instanz-)Methoden für beliebige Eigenschaftswerte verwenden. Sie können beispielsweise mithilfe des folgendes Codes den Laufwerksnamen (die ersten drei Buchstaben) aus einer Buildeigenschaft extrahieren, die einen vollständigen Pfad darstellt:
$(ProjectOutputFolder.Substring(0,3))
Statische Eigenschaftenfunktionen
In Ihrem Buildskript können Sie auf die statischen Eigenschaften und Methoden vieler Systemklassen zugreifen. Um den Wert einer statischen Eigenschaft abzurufen, verwenden Sie die folgende Syntax, wobei Class der Name der Systemklasse und Property der Name der Eigenschaft ist.
$([Class]::Property)
Sie können beispielsweise den folgenden Code verwenden, um eine Buildeigenschaft auf das aktuelle Datum und die aktuelle Uhrzeit festzulegen.
<Today>$([System.DateTime]::Now)</Today>
Um eine statische Methode aufzurufen, verwenden Sie die folgende Syntax, wobei Class der Name der Systemklasse, Method der Name der Methode und (Parameters) die Parameterliste für die Methode ist:
$([Class]::Method(Parameters))
Verwenden Sie beispielsweise das folgende Skript, um eine Buildeigenschaft auf eine neu GUID festzulegen:
<NewGuid>$([System.Guid]::NewGuid())</NewGuid>
In statischen Eigenschaftenfunktionen können Sie eine beliebige statische Methode oder Eigenschaft der folgenden Systemklassen verwenden:
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
Außerdem können Sie die folgenden statischen Methoden und Eigenschaften verwenden:
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
Aufrufen von Instanzmethoden für statische Eigenschaften
Wenn Sie auf eine statische Eigenschaft zugreifen, die eine Objektinstanz zurückgibt, können Sie die Instanzmethoden dieses Objekts aufrufen. Um eine Instanzmethode aufzurufen, verwenden Sie die folgende Syntax, wobei Class der Name der Systemklasse, Property der Name der Eigenschaft, Method der Name der Methode und (Parameters) die Parameterliste für die Methode ist:
$([Class]::Property.Method(Parameters))
Der Name der Klasse muss mit dem Namespace vollqualifiziert sein.
Sie können beispielsweise den folgenden Code verwenden, um eine Buildeigenschaft auf das heutige Datum festzulegen.
<Today>$([System.DateTime]::Now.ToString("yyyy.MM.dd"))</Today>
MSBuild-Eigenschaftenfunktionen
In Ihrem Build kann auf mehrere statische Methoden zugegriffen werden, um Unterstützung für arithmetische, bitweise logische und Escapezeichen bereitzustellen. Auf diese Methoden wird mithilfe der folgenden Syntax zugegriffen, wobei Method der Name der Methode und Parameters die Parameterliste für die Methode ist.
$([MSBuild]::Method(Parameters))
Um beispielsweise zwei Eigenschaften mit numerischen Werten zu addieren, verwenden Sie den folgenden Code.
$([MSBuild]::Add($(NumberOne), $(NumberTwo))
Nachfolgend finden Sie eine Liste mit MSBuild-Eigenschaftenfunktionen:
Funktionssignatur |
Beschreibung |
---|---|
double Add(double a, double b) |
Addiert zwei double-Werte. |
long Add(long a, long b) |
Addiert zwei long-Werte. |
double Subtract(double a, double b) |
Subtrahiert zwei double-Werte. |
long Subtract(long a, long b) |
Subtrahiert zwei long-Werte. |
double Multiply(double a, double b) |
Multipliziert zwei double-Werte. |
long Multiply(long a, long b) |
Multipliziert zwei long-Werte. |
double Divide(double a, double b) |
Dividiert zwei double-Werte. |
long Divide(long a, long b) |
Dividiert zwei long-Werte. |
double Modulo(double a, double b) |
Modulo-Berechnung für zwei double-Werte. |
long Modulo(long a, long b) |
Modulo-Berechnung für zwei long-Werte. |
string Escape(string unescaped) |
Setzt gemäß den MSBuild-Escape-Regeln ein Escapezeichen vor die Zeichenfolge. |
string Unescape(string escaped) |
Entfernt gemäß den MSBuild-Escape-Regeln ein Escapezeichen vor der Zeichenfolge. |
int BitwiseOr(int first, int second) |
Führt einen bitweise OR-Vorgang für das erste und zweite Element aus (first | second). |
int BitwiseAnd(int first, int second) |
Führt einen bitweisen AND-Vorgang für das erste und zweite Element aus (first & second). |
int BitwiseXor(int first, int second) |
Führt einen bitweisen XOR-Vorgang für das erste und zweite Element aus (first ^ second). |
int BitwiseNot(int first) |
Führt einen bitweisen NOT-Vorgang aus (~first). |
Geschachtelte Eigenschaftenfunktionen
Sie können Eigenschaftenfunktionen kombinieren, um komplexere Funktionen zu erstellen, wie das folgende Beispiel zeigt.
$([MSBuild]::BitwiseAnd(32, $([System.IO.File]::GetAttributes(tempFile))))
In diesem Beispiel wird der Wert FileAttributes Archive-Bit (32 oder 0) der Datei, die durch den Pfad tempFile angegeben wird, zurückgegeben. Beachten Sie, dass Enumerationsdatenwerte innerhalb von Eigenschaftenfunktionen nicht nach Name angezeigt werden können. Stattdessen muss der numerische Wert (32) verwendet werden.
Metadaten können auch in geschachtelten Eigenschaftenfunktionen angezeigt werden. Weitere Informationen finden Sie unter MSBuild-Batchverarbeitung.
MSBuild DoesTaskHostExist
Die DoesTaskHostExist-Eigenschaftenfunktion in MSBuild gibt zurück, ob derzeit ein Aufgabenhost für die angegebenen Laufzeit- und Architekturwerte installiert wird.
Diese Eigenschaftenfunktion hat die folgende Syntax:
$[MSBuild]::DoesTaskHostExist(string theRuntime, string theArchitecture)
MSBuild GetDirectoryNameOfFileAbove
Die GetDirectoryNameOfFileAbove-Eigenschaftenfunktion in MSBuild sucht in den Verzeichnissen über dem aktuellen Verzeichnis im Pfad nach einer Datei.
Diese Eigenschaftenfunktion hat die folgende Syntax:
$[MSBuild]::GetDirectoryNameOfFileAbove(string ThePath, string TheFile)
Der folgende Code veranschaulicht diese Syntax beispielhaft.
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), EnlistmentInfo.props))\EnlistmentInfo.props" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), EnlistmentInfo.props))' != '' " />
MSBuild GetRegistryValue
Die GetRegistryValue-Eigenschaftenfunktion in MSBuild gibt den Wert eines Registrierungsschlüssels zurück. Diese Funktion weist zwei Argumente auf, den Schlüsselnamen und den Wertnamen, und gibt den Wert aus der Registrierung zurück. Wenn Sie keinen Wertnamen angeben, wird der Standardwert zurückgegeben.
In den folgenden Beispielen wird veranschaulicht, wie diese Funktion verwendet wird:
$([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
Die GetRegistryValueFromView-Eigenschaftenfunktion in MSBuild ruft Systemregistrierungsdaten anhand des Registrierungsschlüssels, des Werts und einer oder mehrerer geordneter Registrierungsansichten ab. Der Wert und der Schlüssel werden der Reihe nach in jeder Registrierungsansicht gesucht, bis sie gefunden wurden.
Die Syntax für diese Eigenschaftenfunktion ist wie folgt:
[MSBuild]::GetRegistryValueFromView(string keyName, string valueName, object defaultValue, params object[] views)
Das Windows-Betriebssystem mit 64 Bit speichert einen HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node-Registrierungsschlüssel, der eine HKEY_LOCAL_MACHINE\SOFTWARE-Registrierungsansicht für 32-Bit-Anwendungen darstellt.
Eine 32-Bit-Anwendung, die unter WOW64 ausgeführt wird, greift standardmäßig auf die 32-Bit-Registrierungsansicht zu, und eine 64-Bit-Anwendung greift auf die 64-Bit-Registrierungsansicht zu.
Die folgenden Registrierungsansichten sind verfügbar:
Registrierungsansicht |
Definition |
---|---|
RegistryView.Registry32 |
Die Registrierungsansicht für 32-Bit-Anwendungen. |
RegistryView.Registry64 |
Die Registrierungsansicht für 64-Bit-Anwendungen. |
RegistryView.Default |
Die Registrierungsansicht, die mit dem Prozess übereinstimmt, auf dem die Anwendung ausgeführt wird. |
Nachfolgend finden Sie ein Beispiel:
$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Silverlight\v3.0\ReferenceAssemblies', 'SLRuntimeInstallPath', null, RegistryView.Registry64, RegistryView.Registry32))
ruft die SLRuntimeInstallPath-Daten des ReferenceAssemblies-Schlüssels ab und such zuerst in der 64-Bit-Registrierungsansicht und dann in der 32-Bit-Registrierungsansicht.
MSBuild MakeRelative
Die MakeRelative-Eigenschaftenfunktion in MSBuild gibt den relativen Pfad des zweiten Pfads relativ zum ersten Pfad an. Jeder Pfad kann eine Datei oder ein Ordner sein.
Diese Eigenschaftenfunktion hat die folgende Syntax:
$[MSBuild]::MakeRelative($(FileOrFolderPath1), $(FileOrFolderPath2))
Der folgende Code veranschaulicht diese Syntax beispielhaft.
<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
Die ValueOrDefault-Eigenschaftenfunktion in MSBuild gibt das erste Argumente zurück, sofern dieses nicht Null oder leer ist. Wenn das erste Argument Null oder leer ist, gibt die Funktion das zweite Argument zurück.
In dem folgenden Beispiel wird veranschaulicht, wie diese Funktion verwendet wird.
<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
-->