Eigenschaftenfunktionen

In .NET Framework, Version 4, können MSBuild-Skripts mit Eigenschaftenfunktionen ausgewertet werden. 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.

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

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)

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.

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.

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 GetRegistryValue

Die MSBuild GetRegistryValue-Eigenschaftenfunktion gibt den Wert eines Registrierungsschlüssels zurück. Diese Funktion akzeptiert zwei Argumente, den Schlüsselnamen und den Wertnamen. Sie 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 GetDirectoryNameOfFileAbove

Die MSBuild GetDirectoryNameOfFileAbove-Eigenschaftenfunktion sucht eine Datei in den Verzeichnissen über dem aktuellen Verzeichnis im Pfad.

Die Syntax für diese Eigenschaftenfunktion lautet wie folgt:

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

Beispiel:

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

Geschachtelte Eigenschaftenfunktionen

Eigenschaftenfunktionen können zu komplexeren Funktionen kombiniert werden. Beispiel:

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

gibt den Wert des FileAttributesArchive-Bits (32 oder 0) der vom tempFile-Pfad angegebenen Datei zurück. 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.

Siehe auch

Konzepte

MSBuild-Eigenschaften

Weitere Ressourcen

MSBuild