Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Eigenschaftsfunktionen sind Aufrufe von .NET-Methoden, die in MSBuild-Eigenschaftsdefinitionen angezeigt werden. In der Regel verwenden Sie sie, um Eigenschaftsdefinitionen zu erstellen, die komplexere Logik erfordern.
Im Gegensatz zu Aufgaben können Eigenschaftsfunktionen außerhalb von Zielen verwendet werden. Eigenschaftsfunktionen werden immer ausgewertet, wenn die Eigenschaften oder Elemente erweitert werden. Für Eigenschaften und Elemente außerhalb von Zielen werden Eigenschaftenfunktionen also vor jeder Ausführung des Ziels ausgewertet. Bei Eigenschaftengruppen und Elementgruppen innerhalb von Zielen werden Eigenschaftsfunktionen ausgewertet, wenn das Ziel ausgeführt wird.
Ohne Verwendung von MSBuild-Aufgaben können Sie die Systemzeit lesen, Zeichenfolgen vergleichen, reguläre Ausdrücke abgleichen und andere Aktionen in Ihrem Buildskript ausführen. MSBuild wird versuchen, Zeichenfolgen in Zahlen und Zahlen in Zeichenfolgen zu konvertieren und bei Bedarf weitere Konvertierungen vorzunehmen.
Zeichenfolgenwerte, die von Eigenschaftenfunktionen zurückgegeben werden, enthalten maskierte Sonderzeichen. Wenn der Wert so behandelt werden soll, als ob er direkt in die Projektdatei gesetzt wurde, verwenden Sie $([MSBuild]::Unescape())
, um die Sonderzeichen aufzuheben.
Syntax der Eigenschaftsfunktion
Dies sind drei Arten von Eigenschaftenfunktionen; jede Funktion weist eine andere Syntax auf:
- String-Eigenschaftsfunktionen (Instanz)
- Statische Eigenschaftenfunktionen
- MSBuild-Eigenschaftsfunktionen
String-Eigenschaftsfunktionen
Alle Buildeigenschaftswerte sind nur Zeichenfolgenwerte. Sie können Instanz-Zeichenfolgenmethoden verwenden, um auf einem beliebigen Eigenschaftswert zu operieren. Sie können z. B. den Laufwerknamen (die ersten drei Zeichen) aus einer Buildeigenschaft extrahieren, die einen vollständigen Pfad darstellt, indem Sie diesen Code verwenden:
$(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>
Verwenden Sie zum Aufrufen einer statischen Methode die folgende Syntax, wobei Class
der Name der Systemklasse der Name der Methode ist, Method
und (Parameters)
ist die Parameterliste für die Methode:
$([Class]::Method(Parameters))
Um beispielsweise eine Buildeigenschaft auf eine neue GUID festzulegen, können Sie dieses Skript verwenden:
<NewGuid>$([System.Guid]::NewGuid())</NewGuid>
In statischen Eigenschaftenfunktionen können Sie eine beliebige öffentliche statische Methode oder Eigenschaft verwenden, die in .NET Standard 2.0 für diese Systemklassen definiert ist:
- System.Byte-
- System.Char
- System.Convert
- System.DateTime-
- System.DateTimeOffset (Verfügbar in MSBuild 17.3 und höher)
- System.Decimal-
- System.Double
- System.Enum
- System.Guid-
- System.Int16
- System.Int32-
- System.Int64-
- System.IO.Path
- System.Math
- System.Runtime.InteropServices.OSPlatform
- System.Runtime.InteropServices.RuntimeInformation
- System.UInt16-
- System.UInt32-
- System.UInt64-
- System.SByte-
- System.Single
- System.String-
- System.StringComparer
- System.TimeSpan-
- System.Text.RegularExpressions.Regex
- System.UriBuilder
- System.Version
- Microsoft.Build.Utilities.ToolLocationHelper
Hinweis
Methoden und Eigenschaften, die in .NET Standard 2.0 nicht definiert sind, können möglicherweise verfügbar sein, wenn Sie MSBuild in einer Umgebung verwenden, die sie unterstützt, aber es kann nicht garantiert werden, dass sie in allen Situationen verfügbar sind. Aus Kompatibilitätsgründen werden sie am besten vermieden.
Darüber hinaus 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.Environment::Is64BitOperatingSystem
- System.Environment::Is64BitProcess
- System.Environment::MachineName
- System.Environment::NewLine
- System.Environment::OSVersion
- System.Environment::P rocessorCount
- System.Environment::StackTrace
- System.Environment::SystemDirectory
- System.Environment::SystemPageSize
- System.Environment::TickCount
- System.Environment::UserDomainName
- System.Environment::UserInteractive
- System.Environment::UserName
- System.Environment::Version
- System.Environment::WorkingSet
- 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::GetAttributes
- System.IO.File::GetCreationTime
- System.IO.File::GetLastAccessTime
- System.IO.File::GetLastWriteTime
- System.IO.File::ReadAllText
- System.Globalization.CultureInfo::GetCultureInfo
- System.Globalization.CultureInfo::new
- System.Globalization.CultureInfo::CurrentUICulture
System.OperatingSystem-Eigenschaftsfunktionen
Die System.OperatingSystem
Eigenschaftsfunktionen geben Informationen zum Betriebssystem zurück, auf dem MSBuild ausgeführt wird. Wenn Ihr Projekt beispielsweise auf Linux ausgerichtet ist und Sie es auf macOS erstellen, geben die Eigenschaftenfunktionen Informationen zu macOS zurück.
In MSBuild, das auf .NET (dotnet build
) ausgeführt wird, können alle statischen Methoden der System.OperatingSystem
Klasse als statische Eigenschaftsfunktionen aufgerufen werden.
In MSBuild, das auf .NET Framework (MSBuild.exe
) ausgeführt wird, können nur die folgenden Methoden System.OperatingSystem
als statische Eigenschaftsfunktionen aufgerufen werden. MSBuild definiert sie intern, weil System.OperatingSystem
sie nicht auf dem .NET Framework vorhanden sind. Methoden für Betriebssysteme, für die kein .NET SDK vorhanden ist, wie System.OperatingSystem::IsTvOS
, können nicht aufgerufen werden.
- System.OperatingSystem::IsOSPlatform
- System.OperatingSystem::IsOSPlatformVersionAtLeast
- System.OperatingSystem::IsLinux
- System.OperatingSystem::IsFreeBSD
- System.OperatingSystem::IsFreeBSDVersionAtLeast
- System.OperatingSystem::IsMacOS
- System.OperatingSystem::IsMacOSVersionAtLeast
- System.OperatingSystem::IsWindows
- System.OperatingSystem::IsWindowsVersionAtLeast
Das folgende Beispiel zeigt die Verwendung dieser Eigenschaftsfunktionen.
<IsWindows>$([System.OperatingSystem]::IsWindows())</IsWindows>
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. Verwenden Sie zum Aufrufen einer Instanzmethode 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 vollständig qualifiziert sein.
Sie können z. B. den folgenden Code verwenden, um eine Buildeigenschaft auf das aktuelle Datum heute festzulegen.
<Today>$([System.DateTime]::Now.ToString('yyyy.MM.dd'))</Today>
MSBuild-Eigenschaftsfunktionen
Mehrere statische Methoden in Ihrem Build sind zugänglich, um Unterstützung für arithmetische, bitweise logische und Escape-Zeichen zu bieten. Sie greifen mithilfe der folgenden Syntax auf diese Methoden zu, wobei Method
es sich um den Namen der Methode handelt und (Parameters)
die Parameterliste für die Methode ist.
$([MSBuild]::Method(Parameters))
Wenn Sie beispielsweise zwei Eigenschaften mit numerischen Werten hinzufügen möchten, verwenden Sie den folgenden Code.
$([MSBuild]::Add($(NumberOne), $(NumberTwo)))
Hier ist eine Liste der MSBuild-Eigenschaftsfunktionen:
Funktionssignatur | BESCHREIBUNG |
---|---|
double Add(double a, double b) |
Fügen Sie zwei Doppel hinzu. |
long Add(long a, long b) |
Fügen Sie zwei Longs hinzu. |
double Subtract(double a, double b) |
Subtrahieren Sie zwei Doubles. |
long Subtract(long a, long b) |
Subtrahieren Sie zwei Longs. |
double Multiply(double a, double b) |
Multiplizieren Sie zwei Doubles. |
long Multiply(long a, long b) |
Multiplizieren Sie zwei Langzahlen. |
double Divide(double a, double b) |
Dividieren Sie zwei Doppel. |
long Divide(long a, long b) |
Dividieren Sie zwei Lange. |
double Modulo(double a, double b) |
Modulo zwei Doubles. |
long Modulo(long a, long b) |
Modulo zwei Longs. |
string Escape(string unescaped) |
Escape die Zeichenfolge gemäß den MSBuild Escape-Regeln. |
string Unescape(string escaped) |
Entschlüsseln Sie die Zeichenfolge gemäß MSBuild-Escaping-Regeln. |
int BitwiseOr(int first, int second) |
Führen Sie einen bitweisen OR Vorgang für die erste und zweite (erste | Sekunde) durch. |
int BitwiseAnd(int first, int second) |
Führen Sie einen bitweisen AND Vorgang für die erste und zweite (erste und zweite) durch. |
int BitwiseXor(int first, int second) |
Führen Sie einen bitweisen XOR Vorgang für die erste und zweite (erste ^ Sekunde) durch. |
int BitwiseNot(int first) |
Führen Sie eine bitweise Operation NOT (~first) durch. |
bool IsOsPlatform(string platformString) |
Geben Sie an, ob die aktuelle Betriebssystemplattform ist platformString .
platformString muss ein Mitglied von OSPlatform sein. |
bool IsOSUnixLike() |
True, wenn das aktuelle Betriebssystem ein Unix-System ist. |
string NormalizePath(params string[] path) |
Ruft den kanonisierten vollständigen Pfad des bereitgestellten Pfads ab und stellt sicher, dass er die richtigen Verzeichnistrennzeichen für das aktuelle Betriebssystem enthält. |
string NormalizeDirectory(params string[] path) |
Ruft den kanonischen vollständigen Pfad des bereitgestellten Verzeichnisses ab und stellt sicher, dass es die richtigen Verzeichnistrennzeichen für das aktuelle Betriebssystem enthält, während sichergestellt wird, dass er einen nachgestellten Schrägstrich aufweist. |
string EnsureTrailingSlash(string path) |
Wenn der angegebene Pfad keinen abschließenden Schrägstrich hat, fügen Sie einen hinzu. Wenn der Pfad eine leere Zeichenfolge ist, wird sie nicht geändert. |
string GetPathOfFileAbove(string file, string startingDirectory) |
Sucht nach und gibt den vollständigen Pfad zu einer Datei in der Verzeichnisstruktur auf der Ebene und oberhalb des Speicherorts der aktuellen Builddatei zurück oder, falls angegeben, basierend auf startingDirectory . |
string GetDirectoryNameOfFileAbove(string startingDirectory, string fileName) |
Suchen und zurückgeben Sie das Verzeichnis einer Datei entweder im angegebenen Verzeichnis oder an einem Speicherort in der Verzeichnisstruktur oberhalb dieses Verzeichnisses. |
string MakeRelative(string basePath, string path) |
Macht path relativ zu basePath .
basePath muss ein absolutes Verzeichnis sein. Wenn nicht relativ gemacht werden kann, wird sie verbatim zurückgegeben.If path cannot be made relative, it is returned verbatim. Ähnlich wie Uri.MakeRelativeUri . |
string ValueOrDefault(string conditionValue, string defaultValue) |
Gibt die Zeichenfolge im Parameter defaultValue nur zurück, wenn der Parameter conditionValue leer ist, andernfalls den Wert conditionValue zurückgeben. |
string ConvertToBase64(string toEncode) |
Gibt die Zeichenfolge nach der Konvertierung aller Bytes in Base64 (alphanumerische Zeichen plus + und / ), endend in ein oder zwei = Zeichen zurück. |
string ConvertFromBase64(string toDecode) |
Gibt die Zeichenfolge nach der Konvertierung von Base64 (alphanumerische Zeichen plus + und / ) zurück, endend mit einem oder zwei = . |
Geschachtelte Eigenschaftsfunktionen
Sie können Eigenschaftenfunktionen kombinieren, um komplexere Funktionen zu bilden, wie im folgenden Beispiel gezeigt:
$([MSBuild]::BitwiseAnd(32, $([System.IO.File]::GetAttributes(tempFile))))
In diesem Beispiel wird der Wert der FileAttributes zurückgegeben.
Archive
Bit (32 oder 0) der Datei, die vom Pfad tempFile
angegeben wird. Beachten Sie, dass aufgezählte Datenwerte in einigen Kontexten nicht nach Namen angezeigt werden können. Im vorherigen Beispiel muss stattdessen der numerische Wert (32) verwendet werden. In anderen Fällen muss je nach den Erwartungen der aufgerufenen Methode der Enumerationsdatenwert verwendet werden. Im folgenden Beispiel wird der Enum-Wert RegexOptions.
ECMAScript
muss verwendet werden, da ein numerischer Wert nicht konvertiert werden kann, wie diese Methode erwartet.
<PropertyGroup>
<GitVersionHeightWithOffset>$([System.Text.RegularExpressions.Regex]::Replace("$(PrereleaseVersion)", "^.*?(\d+)$", "$1", "System.Text.RegularExpressions.RegexOptions.ECMAScript"))</GitVersionHeightWithOffset>
</PropertyGroup>
Metadaten können auch in geschachtelten Eigenschaftenfunktionen angezeigt werden. Weitere Informationen finden Sie unter MSBuild Batching (Batchverarbeitung).
MSBuild DoesTaskHostExist
Die DoesTaskHostExist
Eigenschaftsfunktion in MSBuild gibt zurück, ob derzeit ein Aufgabenhost für die angegebenen Laufzeit- und Architekturwerte installiert ist.
Diese Eigenschaftsfunktion weist die folgende Syntax auf:
$([MSBuild]::DoesTaskHostExist(string theRuntime, string theArchitecture))
MSBuild EnsureTrailingSlash
Die EnsureTrailingSlash
Eigenschaftsfunktion in MSBuild fügt einen abschließenden Schrägstrich hinzu, wenn noch keiner vorhanden ist.
Diese Eigenschaftsfunktion weist die folgende Syntax auf:
$([MSBuild]::EnsureTrailingSlash('$(PathProperty)'))
MSBuild GetDirectoryNameOfFileAbove
Die MSBuild-Eigenschaftsfunktion GetDirectoryNameOfFileAbove
sucht nach oben nach einem Verzeichnis, das die angegebene Datei enthält, beginnend in (und einschließlich) des angegebenen Verzeichnisses. Er gibt den vollständigen Pfad des nächstgelegenen Verzeichnisses zurück, das die Datei enthält, wenn sie gefunden wird, andernfalls eine leere Zeichenfolge.
Diese Eigenschaftsfunktion weist die folgende Syntax auf:
$([MSBuild]::GetDirectoryNameOfFileAbove(string startingDirectory, string fileName))
In diesem Beispiel wird gezeigt, wie die nächste Datei EnlistmentInfo.props in oder oberhalb des aktuellen Ordners importiert wird, nur wenn eine Übereinstimmung gefunden wird.
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), EnlistmentInfo.props))\EnlistmentInfo.props" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), EnlistmentInfo.props))' != '' " />
Beachten Sie, dass dieses Beispiel präziser geschrieben werden kann, indem Sie stattdessen die GetPathOfFileAbove
Funktion verwenden:
<Import Project="$([MSBuild]::GetPathOfFileAbove(EnlistmentInfo.props))" Condition=" '$([MSBuild]::GetPathOfFileAbove(EnlistmentInfo.props))' != '' " />
MSBuild GetPathOfFileAbove
Die MSBuild-Eigenschaftsfunktion GetPathOfFileAbove
sucht nach oben nach einem Verzeichnis, das die angegebene Datei enthält, beginnend in (und einschließlich) des angegebenen Verzeichnisses. Er gibt den vollständigen Pfad der nächstgelegenen übereinstimmenden Datei zurück, wenn sie gefunden wird, andernfalls eine leere Zeichenfolge.
Diese Eigenschaftsfunktion weist die folgende Syntax auf:
$([MSBuild]::GetPathOfFileAbove(string file, [string startingDirectory]))
dabei file
handelt es sich um den Namen der zu suchenden Datei und startingDirectory
ist ein optionales Verzeichnis, in dem die Suche gestartet werden soll. Standardmäßig beginnt die Suche im eigenen Verzeichnis der aktuellen Datei.
In diesem Beispiel wird gezeigt, wie Sie eine Datei namens dir.props in oder oberhalb des aktuellen Verzeichnisses importieren, nur wenn eine Übereinstimmung gefunden wird:
<Import Project="$([MSBuild]::GetPathOfFileAbove(dir.props))" Condition=" '$([MSBuild]::GetPathOfFileAbove(dir.props))' != '' " />
die funktional gleichbedeutend mit
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))' != '' " />
Manchmal müssen Sie jedoch die Suche im übergeordneten Verzeichnis starten, um das Abgleichen der aktuellen Datei zu vermeiden. Dieses Beispiel zeigt, wie eine Datei "Directory.Build.props " die nächste Datei "Directory.Build.props" in einer streng höheren Ebene der Struktur importieren kann, ohne sich rekursiv selbst zu importieren:
<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))" />
die funktional gleichbedeutend mit
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove('$(MSBuildThisFileDirectory)../', 'Directory.Build.props'))/Directory.Build.props" />
MSBuild WertAusDerRegistrierungHolen
Die MSBuild-Eigenschaftsfunktion GetRegistryValue
gibt den Wert eines Registrierungsschlüssels zurück. Diese Funktion verwendet 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.
Die folgenden Beispiele zeigen, 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
Warnung
In der .NET SDK-Version von MSBuild (dotnet build
) wird diese Funktion nicht unterstützt.
MSBuild GetRegistryValueFromView
Die MSBuild-Eigenschaftsfunktion GetRegistryValueFromView
ruft Systemregistrierungsdaten anhand des Registrierungsschlüssels, Werts und einer oder mehrerer geordneter Registrierungsansichten ab. Der Schlüssel und der Wert werden in jeder Registrierungsansicht in der Reihenfolge durchsucht, bis sie gefunden werden.
Die Syntax für diese Eigenschaftsfunktion lautet:
[MSBuild]::GetRegistryValueFromView(string keyName, string valueName, object defaultValue, params object[] views)
Das Windows 64-Bit-Betriebssystem verwaltet einen HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node Registrierungsschlüssel, der eine HKEY_LOCAL_MACHINE\SOFTWARE Registrierungsansicht für 32-Bit-Anwendungen darstellt.
Standardmäßig greift eine 32-Bit-Anwendung, die auf WOW64 ausgeführt wird, auf die 32-Bit-Registrierungsansicht zu und eine 64-Bit-Anwendung greift auf die 64-Bit-Registrierungsansicht zu.
Die folgenden Registrierungsansichten sind verfügbar:
Registeransicht | Definition |
---|---|
RegistryView.Registry32 | Die 32-Bit-Anwendungsregistrierungsansicht. |
RegistryView.Registry64 | Die 64-Bit-Anwendungsregistrierungsansicht. |
RegistryView.Default | Die Registrierungsansicht, die dem Prozess entspricht, auf dem die Anwendung ausgeführt wird. |
Es folgt 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, sucht zuerst in der 64-Bit-Registrierungsansicht und dann in der 32-Bit-Registrierungsansicht.
Warnung
In der .NET SDK-Version von MSBuild (dotnet build
) wird diese Funktion nicht unterstützt.
MSBuild MakeRelative
Die MSBuild-Eigenschaftsfunktion MakeRelative
gibt den relativen Pfad des zweiten Pfads relativ zum ersten Pfad zurück. Jeder Pfad kann eine Datei oder ein Ordner sein.
Diese Eigenschaftsfunktion weist die folgende Syntax auf:
$([MSBuild]::MakeRelative($(FileOrFolderPath1), $(FileOrFolderPath2)))
Der folgende Code ist ein Beispiel für diese 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 StableStringHash
Die MSBuild-Eigenschaftsfunktion StableStringHash
akzeptiert ein Zeichenfolgenargument und gibt einen Hashcode zurück, der garantiert stabil ist, was bedeutet, dass derselbe Code immer für dieselbe Zeichenfolgeneingabe zurückgegeben wird. Der zurückgegebene Hash ist identisch, unabhängig davon, ob MSBuild oder dotnet build
verwendet wird, und ist im Gegensatz zur .NET-Methode GetHashCode
auf plattformübergreifender Architektur stabil. Es ist nicht garantiert, dass es in verschiedenen MSBuild-Versionen stabil ist.
Diese Funktion ist in MSBuild 16.9.0 oder höher verfügbar.
Das folgende Beispiel zeigt, wie diese Funktion verwendet wird.
<Project>
<PropertyGroup>
<MyHash>$([MSBuild]::StableStringHash("test1"))</MyHash>
</PropertyGroup>
<Target Name="WriteHash" AfterTargets="Build">
<Message Text="Hash: $(MyHash)"/>
</Target>
</Project>
Von MSBuild Version 17.10.0 akzeptiert diese Funktion das zweite, optionale Argument, das den zu verwendenden Hashingalgorithmus anfordert:
<Project>
<PropertyGroup>
<MyHash>$([MSBuild]::StableStringHash("test1", "Sha256"))</MyHash>
</PropertyGroup>
<Target Name="WriteHash" AfterTargets="Build">
<Message Text="Hash: $(MyHash)"/>
</Target>
</Project>
Das zweite Argument ist nicht groß-/kleinbuchstabenempfindlich und unterstützt derzeit die folgenden Werte:
- Legacy – behält das gleiche Verhalten wie das Aufrufen der Funktion ohne das zweite Argument bei. Gibt signierte 32-Bit-Ganzzahl mit ähnlichen Eigenschaften wie
string.GetHashCode
. - Fnv1a32bit – Gibt signierte 32-Bit-Ganzzahl zurück, die einen Fowler-Noll-Vo-Hash der Version "1a" der angegebenen Zeichenfolge darstellt.
- Fnv1a64bit – Gibt signierte 64-Bit-Ganzzahl zurück, die einen Fowler-Noll-Vo-Hash der Version "1a" der angegebenen Zeichenfolge darstellt.
- Sha256 – Gibt eine ungekennzeichnete Hexzeichenfolge zurück, die einen SHA256-Hash der angegebenen Zeichenfolge darstellt.
MSBuild ValueOrDefault
Die MSBuild-Eigenschaftsfunktion ValueOrDefault
gibt das erste Argument zurück, es sei denn, sie ist null oder leer. Wenn das erste Argument null oder leer ist, gibt die Funktion das zweite Argument zurück.
Das folgende Beispiel zeigt, wie diese Funktion verwendet wird.
<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
-->
MSBuild TargetFramework- und TargetPlatform-Funktionen
MSBuild 16.7 und höher definieren mehrere Funktionen für die Behandlung von TargetFramework- und TargetPlatform-Eigenschaften.
Funktionssignatur | BESCHREIBUNG |
---|---|
GetTargetFrameworkIdentifier(string targetFramework) |
Analysieren Sie den TargetFrameworkIdentifier aus dem TargetFramework. |
GetTargetFrameworkVersion(string targetFramework, int versionPartCount) |
Analysieren Sie die TargetFrameworkVersion anhand des TargetFramework. |
GetTargetPlatformIdentifier(string targetFramework) |
Analysieren Sie den TargetPlatformIdentifier aus dem TargetFramework. |
GetTargetPlatformVersion(string targetFramework, int versionPartCount) |
Analysieren Sie die TargetPlatformVersion aus dem TargetFramework. |
IsTargetFrameworkCompatible(string targetFrameworkTarget, string targetFrameworkCandidate) |
Gibt 'True' zurück, wenn das Kandidatenzielframework (zweites Argument) mit dem Zielframework kompatibel ist, das durch das erste Argument angegeben ist, andernfalls "false". |
Der versionPartCount
Parameter von GetTargetFrameworkVersion
und GetTargetPlatformVersion
weist den Standardwert 2 auf.
Das folgende Beispiel zeigt, wie diese Funktionen verwendet werden.
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Value1>$([MSBuild]::GetTargetFrameworkIdentifier('net5.0-windows7.0'))</Value1>
<Value2>$([MSBuild]::GetTargetFrameworkVersion('net5.0-windows7.0'))</Value2>
<Value3>$([MSBuild]::GetTargetPlatformIdentifier('net5.0-windows7.0'))</Value3>
<Value4>$([MSBuild]::GetTargetPlatformVersion('net5.0-windows7.0'))</Value4>
<Value5>$([MSBuild]::IsTargetFrameworkCompatible('net5.0-windows', 'net5.0'))</Value5>
<Value6>$([MSBuild]::IsTargetFrameworkCompatible('net5.0', 'net6.0'))</Value6>
<Value7>$([MSBuild]::IsTargetFrameworkCompatible('net5.0', 'net8.0'))</Value7>
</PropertyGroup>
<Target Name="MyTarget">
<Message Text="Value1 = $(Value1)" />
<Message Text="Value2 = $(Value2)" />
<Message Text="Value3 = $(Value3)" />
<Message Text="Value4 = $(Value4)" />
<Message Text="Value5 = $(Value5)" />
<Message Text="Value6 = $(Value6)" />
<Message Text="Value7 = $(Value7)" />
</Target>
</Project>
Value1 = .NETCoreApp
Value2 = 5.0
Value3 = windows
Value4 = 7.0
Value5 = True
Value6 = False
Value7 = False
MSBuild-Versionsvergleichsfunktionen
MSBuild 16.5 und höher definieren mehrere Funktionen zum Vergleichen von Zeichenfolgen, die Versionen darstellen.
Hinweis
Vergleichsoperatoren in Bedingungen können Zeichenfolgen vergleichen, die als System.Version
Objekte analysiert werden können, aber der Vergleich kann zu unerwarteten Ergebnissen führen. Bevorzugen Sie die Funktionseigenschaften.
Funktionssignatur | BESCHREIBUNG |
---|---|
VersionEquals(string a, string b) |
Gibt true zurück, wenn die Versionen a und b nach den folgenden Regeln gleichwertig sind. |
VersionGreaterThan(string a, string b) |
Gibt zurück true , wenn die Version a größer als b gemäß den folgenden Regeln ist. |
VersionGreaterThanOrEquals(string a, string b) |
Gibt true zurück, wenn die Version a gemäß den unten stehenden Regeln größer oder gleich b ist. |
VersionLessThan(string a, string b) |
Gibt zurück true , wenn die Version a kleiner als b gemäß den folgenden Regeln ist. |
VersionLessThanOrEquals(string a, string b) |
Geben Sie true zurück, wenn die Version a kleiner oder gleich b ist, gemäß den folgenden Regeln. |
VersionNotEquals(string a, string b) |
Gibt false zurück, wenn die Versionen a und b nach den folgenden Regeln gleichwertig sind. |
In diesen Methoden werden Versionen wie System.Version analysiert, mit den folgenden Ausnahmen:
Führende
v
oderV
werden ignoriert, was den Vergleich mit$(TargetFrameworkVersion)
ermöglicht.Alles vom ersten '-' oder '+' bis zum Ende der Versionszeichenfolge wird ignoriert. Dies ermöglicht die Übergabe semantischer Versionen (Semver), obwohl die Reihenfolge nicht mit Semver identisch ist. Stattdessen weisen Präreleasebezeichner und Buildmetadaten keine Sortiergewichtung auf. Dies kann z. B. hilfreich sein, um ein Feature für
>= x.y
zu aktivieren und es beix.y.z-pre
in Kraft treten zu lassen.Nicht angegebene Teile sind identisch mit Nullwertteilen. (
x == x.0 == x.0.0 == x.0.0.0
).Leerzeichen sind in ganzzahligen Komponenten nicht zulässig.
Die Hauptversion ist nur gültig (
3
ist gleich3.0.0.0
)+
ist nicht als positives Zeichen in ganzzahligen Komponenten zulässig (sie wird als Semver-Metadaten behandelt und ignoriert)
Tipp
Vergleiche von TargetFramework-Eigenschaften sollten in der Regel IsTargetFrameworkCompatible verwenden, anstatt Versionen zu extrahieren und zu vergleichen. Dies ermöglicht den Vergleich von TargetFramework
s, die sowohl in TargetFrameworkIdentifier
als auch in der Version variieren.
MSBuild-Bedingungsfunktionen
Die Funktionen Exists
und HasTrailingSlash
sind keine Eigenschaftsfunktionen. Sie sind für die Verwendung mit dem Condition
Attribut verfügbar. Siehe MSBuild-Bedingungen.