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

Dd633440.collapse_all(de-de,VS.110).gifEigenschaftenfunktionen 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))

Dd633440.collapse_all(de-de,VS.110).gifStatische 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

Dd633440.collapse_all(de-de,VS.110).gifAufrufen 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>

Dd633440.collapse_all(de-de,VS.110).gifMSBuild-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
-->

Siehe auch

Konzepte

MSBuild-Eigenschaften

Weitere Ressourcen

MSBuild