Eigenschaftenfunktionen
In den .NET Framework-Versionen 4 und 4,5, können Eigenschaftenfunktionen verwendet werden, um MSBuild-Skripts auszuwerten.Eigenschaftenfunktionen können für Eigenschaften an jeder beliebigen Position verwendet werden.Im Gegensatz zu Aufgaben können Eigenschaftenfunktionen außerhalb von Zielen verwendet werden, zudem werden sie vor sämtlichen Zielausführungen ausgewertet.
Sie können die Systemzeit lesen, Zeichenfolgen vergleichen, nach regulären Ausdrücken suchen und weitere Aktionen im Buildskript ausführen, ohne MSBuild-Aufgaben zu verwenden.MSBuild versucht, Zeichenfolgen in Zahlen und Zahlen in Zeichenfolgen zu konvertieren und bei Bedarf weitere Konvertierungen vorzunehmen.
In diesem Thema:
Syntax von Eigenschaftenfunktionen
Eigenschaftenfunktionen in Zeichenfolgenform
Statische Eigenschaftenfunktionen
Aufrufen von Instanzmethoden für statische Eigenschaften
MSBuild-Eigenschaftenfunktionen
Geschachtelte Eigenschaftenfunktionen
MSBuild DoesTaskHostExist
MSBuild GetDirectoryNameOfFileAbove
MSBuild GetRegistryValue
MSBuild GetRegistryValueFromView
MSBuild MakeRelative
MSBuild ValueOrDefault
Syntax von Eigenschaftenfunktionen
Im Folgenden sind die drei Arten von Eigenschaftenfunktionen aufgeführt. Für jede Funktion gilt eine eigene Syntax:
Eigenschaftenfunktionen in Zeichenfolgenform (Instanzform)
Statische Eigenschaftenfunktionen
MSBuild-Eigenschaftenfunktionen
Eigenschaftenfunktionen in Zeichenfolgenform
Bei allen Build-Eigenschaftswerten handelt es sich einfach um Zeichenfolgenwerte.Für jeden Eigenschaftswert können Sie Zeichenfolgenmethoden (Instanzmethoden) verwenden.Beispielsweise können Sie mit dem folgenden Code den Laufwerknamen (die ersten drei Zeichen) aus einer Buildeigenschaft extrahieren, die einen vollständigen Pfad darstellt:
$(ProjectOutputFolder.Substring(0,3))
Statische Eigenschaftenfunktionen
Im Buildskript können Sie auf die statischen Eigenschaften und Methoden zahlreicher Systemklassen zugreifen.Den Wert einer statischen Eigenschaft rufen Sie mit der folgenden Syntax ab, wobei Class den Namen der Systemklasse darstellt und Property den Name der Eigenschaft.
$([Class]::Property)
Beispielsweise können Sie mit dem folgenden Code eine Buildeigenschaft auf das aktuelle Datum und die aktuelle Uhrzeit festlegen.
<Today>$([System.DateTime]::Now)</Today>
Eine statische Methode rufen Sie mit der folgenden Syntax auf, wobei Class den Namen der Systemklasse darstellt, Method den Namen der Methode und (Parameters) die Parameterliste für die Methode:
$([Class]::Member(Parameters))
Eine Buildeigenschaft legen Sie mit dem folgenden Skript auf eine neue GUID fest:
<NewGuid>$([System.Guid]::NewGuid())</NewGuid>
In statischen Eigenschaftenfunktionen können Sie jede 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 die 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.Eine Instanzmethode rufen Sie mit der folgenden Syntax auf, wobei Class den Namen der Systemklasse darstellt, Property den Namen der Eigenschaft, Method den Namen der Methode und (Parameters) die Parameterliste für die Methode:
$([Class]:: Property.Method(Parameters))
Der Name der Klasse muss vollqualifiziert, einschließlich des Namespace, angegeben werden.
Beispielsweise können Sie mit dem folgenden Code eine Buildeigenschaft auf das aktuelle Datum von heute festlegen.
<Today>$([System.DateTime]::Now.ToString("yyyy.MM.dd"))</Today>
MSBuild-Eigenschaftenfunktionen
Auf mehrere statische Methoden im Build können Sie zugreifen, um Unterstützung für arithmetische, bitweise logische und Escapezeichen bereitzustellen.Auf diese Methoden greifen Sie mit der folgenden Syntax zu, wobei Method den Namen der Methode darstellt und Parameters die Parameterliste für die Methode.
$([MSBuild]::Method(Parameters))
Wenn Sie zum Beispiel zwei Eigenschaften mit numerischen Werten addieren möchten, verwenden Sie den folgenden Code.
$([MSBuild]::Add($(NumberOne), $(NumberTwo))
Im Folgenden finden Sie eine Liste von MSBuild-Eigenschaftenfunktionen:
Funktionssignatur |
Description |
---|---|
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) |
Führt die Modulo-Operation für zwei double-Werte aus. |
long Modulo(long a, long b) |
Führt die Modulo-Operation für zwei long-Werte aus. |
string Escape(string unescaped) |
Versieht die Zeichenfolge anhand der MSBuild-Escaperegeln mit Escapezeichen. |
string Unescape(string escaped) |
Entfernt anhand der MSBuild-Escaperegeln die Escapezeichen aus der Zeichenfolge. |
int BitwiseOr(int first, int second) |
Führt eine bitweise OR-Operation für das erste und zweite int aus (first | second). |
int BitwiseAnd(int first, int second) |
Führt eine bitweise AND-Operation für das erste und zweite int aus (first & second). |
int BitwiseXor(int first, int second) |
Führt eine bitweise XOR-Operation für das erste und zweite int aus (first ^ second). |
int BitwiseNot(int first) |
Führt eine bitweise NOT-Operation (~first) aus. |
Geschachtelte Eigenschaftenfunktionen
Sie können Eigenschaftenfunktionen kombinieren, um komplexere Funktionen im folgenden Beispiel gezeigt, zu bilden.
$([MSBuild]::BitwiseAnd(32, $([System.IO.File]::GetAttributes(tempFile))))
Dieses Beispiel gibt den Wert des Bits FileAttributesArchive (32 oder 0) der Datei zurück, die durch den Pfad tempFile angegeben ist.Aufgelisteten Datenwerte können nicht in Eigenschaftenfunktionen nicht über deren Namen angegeben werden.Stattdessen muss der numerische Wert (32) verwendet werden.
Metadaten können ebenfalls in geschachtelten Eigenschaftenfunktionen verwendet werden.Weitere Informationen finden Sie unter MSBuild-Batchverarbeitung.
MSBuild DoesTaskHostExist
Die DoesTaskHostExist-Eigenschaftenfunktion in MSBuild gibt zurück, ob ein Aufgabenhost nur für die angegebenen Laufzeit- und Architekturwerte installiert ist.
Diese Eigenschaftenfunktion hat folgende Syntax:
$[MSBuild]::DoesTaskHostExist(string theRuntime, string theArchitecture)
MSBuild GetDirectoryNameOfFileAbove
Die MSBuild GetDirectoryNameOfFileAbove-Eigenschaftenfunktion sucht eine Datei in den Verzeichnissen über dem aktuellen Verzeichnis im Pfad.
Diese Eigenschaftenfunktion hat folgende Syntax:
$[MSBuild]::GetDirectoryNameOfFileAbove(string ThePath, string TheFile)
Der folgende Code ist ein Beispiel dieser Syntax.
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), EnlistmentInfo.props))\EnlistmentInfo.props" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), EnlistmentInfo.props))' != '' " />
MSBuild GetRegistryValue
Die MSBuild GetRegistryValue-Eigenschaftenfunktion gibt den Wert eines Registrierungsschlüssels zurück.Diese Funktion akzeptiert zwei Argumente, 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 die Verwendung dieser Funktion veranschaulicht:
$([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 MSBuild-GetRegistryValueFromView-Eigenschaftenfunktion ruft Systemregistrierungsdaten mit dem Registrierungsschlüssel, dem Wert und mindestens einer geordneten Registrierungsansicht ab.Schlüssel und Wert werden in jeder Registrierungsansicht systematisch gesucht, bis sie gefunden werden.
Die Syntax für diese Eigenschaftenfunktion lautet wie folgt:
[MSBuild]::GetRegistryValueFromView(string keyName, string valueName, object defaultValue, params object[] views)
Das Windows-64-Bit-Betriebssystem enthält einen HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node-Registrierungsschlüssel, der eine HKEY_LOCAL_MACHINE\SOFTWARE-Registrierungsansicht für 32-Bit-Anwendungen enthält.
Standardmäßig greift eine 32-Bit-Anwendung unter WOW64 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, für den die Anwendung ausgeführt wird. |
Im Folgenden 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 vom ReferenceAssemblies-Schlüssel ab, wobei zuerst die 64-Bit- und anschließend die 32-Bit-Registrierungsansicht verarbeitet wird.
MSBuild MakeRelative
Die Eigenschaftenfunktion MSBuild MakeRelative gibt den relativen Pfad des zweiten Pfad relativ zum Pfad zurück.Jeder Pfad kann eine Datei oder ein Ordner sein.
Diese Eigenschaftenfunktion hat folgende Syntax:
$[MSBuild]::MakeRelative($(FileOrFolderPath1), $(FileOrFolderPath2))
Der folgende Code ist ein Beispiel dieser 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 ValueOrDefault
Die Eigenschaftenfunktion MSBuild ValueOrDefault gibt das erste Argument zurück, es sei denn, dies NULL oder leer ist leert.Wenn das erste Argument NULL oder leer ist, gibt die - Funktion das zweite Argument zurück.
Im folgenden Beispiel wird gezeigt, 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
-->