Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Eigenschapsfuncties zijn aanroepen naar .NET-methoden die worden weergegeven in MSBuild-eigenschapsdefinities. Doorgaans gebruikt u ze om eigenschapsdefinities te maken waarvoor complexere logica is vereist.
In tegenstelling tot taken kunnen eigenschapsfuncties buiten doelen worden gebruikt. Eigenschapsfuncties worden geëvalueerd wanneer de eigenschappen of items worden uitgebreid. Voor eigenschappen en items buiten doelen worden eigenschapsfuncties dus geëvalueerd voordat een doel wordt uitgevoerd. Voor eigenschapsgroepen en itemgroepen binnen doelen worden eigenschapsfuncties geëvalueerd wanneer het doel wordt uitgevoerd.
Zonder MSBuild-taken kunt u de systeemtijd lezen, tekenreeksen vergelijken, reguliere expressies vergelijken en andere acties uitvoeren in uw buildscript. MSBuild probeert tekenreeksen naar getallen en getallen naar tekenreeksen te converteren, en indien nodig andere conversies uit te voeren.
Tekenreekswaarden die worden geretourneerd uit eigenschapsfuncties, hebben speciale tekens die zijn ontsnapt. Als u wilt dat de waarde wordt behandeld alsof deze rechtstreeks in het projectbestand is geplaatst, gebruikt u $([MSBuild]::Unescape())
om de speciale tekens te ontsnappen.
Syntaxis van eigenschapsfunctie
Dit zijn drie soorten eigenschapsfuncties; elke functie heeft een andere syntaxis:
- Eigenschapsfuncties van tekenreeks (instantie)
- Statische eigenschapsfuncties
- MSBuild-eigenschapsfuncties
Tekenreekseigenschapsfuncties
Alle build-eigenschapswaarden zijn alleen tekenreekswaarden. U kunt tekenreeksmethoden (instantie) gebruiken om te werken op elke eigenschapswaarde. U kunt bijvoorbeeld de stationsnaam (de eerste drie tekens) extraheren uit een build-eigenschap die een volledig pad vertegenwoordigt met behulp van deze code:
$(ProjectOutputFolder.Substring(0,3))
Statische eigenschapsfuncties
In uw buildscript hebt u toegang tot de statische eigenschappen en methoden van veel systeemklassen. Als u de waarde van een statische eigenschap wilt ophalen, gebruikt u de volgende syntaxis, waarbij Class
de naam van de systeemklasse en Property
de naam van de eigenschap is.
$([Class]::Property)
U kunt bijvoorbeeld de volgende code gebruiken om een build-eigenschap in te stellen op de huidige datum en tijd.
<Today>$([System.DateTime]::Now)</Today>
Als u een statische methode wilt aanroepen, gebruikt u de volgende syntaxis, waarbij Class
de naam van de systeemklasse Method
de naam van de methode is en (Parameters)
de parameterlijst voor de methode is:
$([Class]::Method(Parameters))
Als u bijvoorbeeld een build-eigenschap wilt instellen op een nieuwe GUID, kunt u dit script gebruiken:
<NewGuid>$([System.Guid]::NewGuid())</NewGuid>
In statische eigenschapsfuncties kunt u elke openbare statische methode of eigenschap gebruiken die is gedefinieerd in .NET Standard 2.0 voor deze systeemklassen:
- System.Byte-
- System.Char
- System.Convert
- System.DateTime-
- System.DateTimeOffset (beschikbaar in MSBuild 17.3 en hoger)
- System.Decimale
- 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
Opmerking
Methoden en eigenschappen die niet zijn gedefinieerd in .NET Standard 2.0 zijn mogelijk beschikbaar wanneer u MSBuild gebruikt in een omgeving die deze ondersteunt, maar in alle situaties niet gegarandeerd beschikbaar is. Om compatibiliteitsredenen worden ze het beste vermeden.
Daarnaast kunt u de volgende statische methoden en eigenschappen gebruiken:
- 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-eigenschapsfuncties
De System.OperatingSystem
eigenschapsfuncties retourneren informatie over het besturingssysteem waarop MSBuild wordt uitgevoerd. Als uw project bijvoorbeeld is gericht op Linux en u het bouwt in macOS, retourneren de eigenschapsfuncties informatie over macOS.
In MSBuild die wordt uitgevoerd op .NET (dotnet build
), kunnen alle statische methoden van de System.OperatingSystem
klasse worden aangeroepen als statische eigenschapsfuncties.
In MSBuild die wordt uitgevoerd op .NET Framework (MSBuild.exe
), kunnen alleen de volgende methoden System.OperatingSystem
worden aangeroepen als statische eigenschapsfuncties. MSBuild implementeert ze intern, omdat System.OperatingSystem
ze niet in het .NET Framework definieert. Methoden voor besturingssystemen waarvoor geen .NET SDK is, zoals System.OperatingSystem::IsTvOS
, kunnen niet worden aangeroepen.
- 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
In het volgende voorbeeld ziet u het gebruik van deze eigenschapsfuncties.
<IsWindows>$([System.OperatingSystem]::IsWindows())</IsWindows>
Instantiemethoden aanroepen voor statische eigenschappen
Als u toegang krijgt tot een statische eigenschap die een objectexemplaren retourneert, kunt u de exemplaarmethoden van dat object aanroepen. Als u een instantiemethode wilt aanroepen, gebruikt u de volgende syntaxis, waarbij Class
de naam van de systeemklasse is, Property
de naam van de eigenschap is, Method
de naam van de methode en (Parameters)
de parameterlijst voor de methode:
$([Class]::Property.Method(Parameters))
De naam van de klasse moet volledig zijn gekwalificeerd met de namespace.
U kunt bijvoorbeeld de volgende code gebruiken om een build-eigenschap in te stellen op de huidige datum van vandaag.
<Today>$([System.DateTime]::Now.ToString('yyyy.MM.dd'))</Today>
MSBuild-eigenschapsfuncties
Er zijn verschillende statische methoden in uw build beschikbaar om rekenkundige, bitgewijze logische en escape-tekenondersteuning te bieden. U opent deze methoden met behulp van de volgende syntaxis, waarbij Method
de naam van de methode is en (Parameters)
de lijst met parameters voor de methode is.
$([MSBuild]::Method(Parameters))
Als u bijvoorbeeld twee eigenschappen met numerieke waarden wilt samenvoegen, gebruikt u de volgende code.
$([MSBuild]::Add($(NumberOne), $(NumberTwo)))
Hier volgt een lijst met MSBuild-eigenschapsfuncties:
Functiehandtekening | Beschrijving |
---|---|
double Add(double a, double b) |
Voeg twee dubbele punten toe. |
long Add(long a, long b) |
Voeg twee longen toe. |
double Subtract(double a, double b) |
Twee dubbele waarden aftrekken. |
long Subtract(long a, long b) |
Twee gehele getallen van het type long aftrekken. |
double Multiply(double a, double b) |
Vermenigvuldig twee dubbele waarden. |
long Multiply(long a, long b) |
Vermenigvuldig twee lange getallen. |
double Divide(double a, double b) |
Deel twee dubbele waarden. |
long Divide(long a, long b) |
Deel twee lange gehele getallen. |
double Modulo(double a, double b) |
Modulo twee double-waardes. |
long Modulo(long a, long b) |
Modulo twee longen. |
string Escape(string unescaped) |
Escape de tekenreeks volgens msBuild escape-regels. |
string Unescape(string escaped) |
De-escapen van de tekenreeks volgens MSBuild escape regels. |
int BitwiseOr(int first, int second) |
Voer een bitwise OR -bewerking uit op de eerste en tweede (eerste | tweede). |
int BitwiseAnd(int first, int second) |
Voer een bitwise AND uit op de eerste en tweede (eerste en tweede). |
int BitwiseXor(int first, int second) |
Voer een bitwise XOR uit op de eerste en tweede (eerste ^ tweede). |
int BitwiseNot(int first) |
Voer een bitsgewijze NOT (~eerst) uit. |
bool IsOsPlatform(string platformString) |
Geef op of het huidige besturingssysteemplatform is platformString .
platformString moet lid zijn van OSPlatform. |
bool IsOSUnixLike() |
Dit is waar als het huidige besturingssysteem een Unix-systeem is. |
string NormalizePath(params string[] path) |
Hiermee haalt u het gecanoniseerde volledige pad van het opgegeven pad op en zorgt u ervoor dat het de juiste mapscheidingstekens voor het huidige besturingssysteem bevat. |
string NormalizeDirectory(params string[] path) |
Hiermee haalt u het canonicaliseerde volledige pad van de opgegeven map op en zorgt u ervoor dat het de juiste mapscheidingstekens voor het huidige besturingssysteem bevat, terwijl u ervoor zorgt dat deze een afsluitende slash heeft. |
string EnsureTrailingSlash(string path) |
Als het opgegeven pad geen afsluitende slash heeft, voegt u er een toe. Als het pad een lege tekenreeks is, wordt dit niet gewijzigd. |
string GetPathOfFileAbove(string file, string startingDirectory) |
Zoekt en retourneert het volledige pad naar een bestand in de mapstructuur op en boven de locatie van het huidige buildbestand, of op basis van startingDirectory , indien opgegeven. |
string GetDirectoryNameOfFileAbove(string startingDirectory, string fileName) |
Zoek en retourneer de map van een bestand in de opgegeven map of een locatie in de mapstructuur boven die map. |
string MakeRelative(string basePath, string path) |
Maakt path ten opzichte van basePath .
basePath moet een absolute directory zijn. Als path niet relatief kan worden gemaakt, wordt het letterlijk geretourneerd. Vergelijkbaar met Uri.MakeRelativeUri . |
string ValueOrDefault(string conditionValue, string defaultValue) |
Retourneert de tekenreeks alleen in parameter defaultValue als de parameter conditionValue leeg is, anders retourneert u de waarde conditionValue . |
string ConvertToBase64(string toEncode) |
Retourneert de tekenreeks nadat alle bytes zijn geconverteerd naar grondtal 64 (alfanumerieke tekens plus + en / ), eindigend op een of twee = . |
string ConvertFromBase64(string toDecode) |
Retourneert de tekenreeks na het converteren van grondtal 64 (alfanumerieke tekens plus + en / ), eindigend op een of twee = . |
Geneste eigenschapsfuncties
U kunt eigenschapsfuncties combineren om complexere functies te vormen, zoals in het volgende voorbeeld wordt weergegeven:
$([MSBuild]::BitwiseAnd(32, $([System.IO.File]::GetAttributes(tempFile))))
In dit voorbeeld wordt de waarde van de FileAttributes teruggegeven.
Archive
bit (32 of 0) van het bestand dat door het pad tempFile
is opgegeven. U ziet dat geïnventareerde gegevenswaarden in sommige contexten niet op naam kunnen worden weergegeven. In het vorige voorbeeld moet de numerieke waarde (32) worden gebruikt. In andere gevallen moet, afhankelijk van de verwachtingen van de aangeroepen methode, de enum-gegevenswaarde worden gebruikt. In het volgende voorbeeld is de enumwaarde RegexOptions.
ECMAScript
moet worden gebruikt omdat een numerieke waarde niet kan worden geconverteerd zoals deze methode verwacht.
<PropertyGroup>
<GitVersionHeightWithOffset>$([System.Text.RegularExpressions.Regex]::Replace("$(PrereleaseVersion)", "^.*?(\d+)$", "$1", "System.Text.RegularExpressions.RegexOptions.ECMAScript"))</GitVersionHeightWithOffset>
</PropertyGroup>
Metagegevens kunnen ook worden weergegeven in geneste eigenschapsfuncties. Zie Batchingvoor meer informatie.
MSBuild DoesTaskHostExist
De DoesTaskHostExist
eigenschapsfunctie in MSBuild retourneert of een taakhost momenteel is geïnstalleerd voor de opgegeven runtime- en architectuurwaarden.
Deze eigenschapsfunctie heeft de volgende syntaxis:
$([MSBuild]::DoesTaskHostExist(string theRuntime, string theArchitecture))
MSBuild EnsureTrailingSlash
De EnsureTrailingSlash
eigenschapsfunctie in MSBuild voegt een afsluitende slash toe als deze nog niet bestaat.
Deze eigenschapsfunctie heeft de volgende syntaxis:
$([MSBuild]::EnsureTrailingSlash('$(PathProperty)'))
MSBuild GetDirectoryNameOfFileAbove
De eigenschapsfunctie MSBuild GetDirectoryNameOfFileAbove
zoekt omhoog naar een map met het opgegeven bestand, beginnend in (en inclusief) de opgegeven map. Het retourneert het volledige pad van de dichtstbijzijnde map met het bestand als het wordt gevonden, anders een lege tekenreeks.
Deze eigenschapsfunctie heeft de volgende syntaxis:
$([MSBuild]::GetDirectoryNameOfFileAbove(string startingDirectory, string fileName))
In dit voorbeeld ziet u hoe u het dichtstbijzijnde EnlistmentInfo.props-bestand in of boven de huidige map importeert, alleen als er een overeenkomst wordt gevonden:
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), EnlistmentInfo.props))\EnlistmentInfo.props" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), EnlistmentInfo.props))' != '' " />
Houd er rekening mee dat dit voorbeeld beknopter kan worden geschreven met behulp van de GetPathOfFileAbove
functie:
<Import Project="$([MSBuild]::GetPathOfFileAbove(EnlistmentInfo.props))" Condition=" '$([MSBuild]::GetPathOfFileAbove(EnlistmentInfo.props))' != '' " />
MSBuild GetPathOfFileAbove
De eigenschapsfunctie MSBuild GetPathOfFileAbove
zoekt omhoog naar een map met het opgegeven bestand, beginnend in (en inclusief) de opgegeven map. Het retourneert het volledige pad van het dichtstbijzijnde overeenkomende bestand als het wordt gevonden, anders een lege tekenreeks.
Deze eigenschapsfunctie heeft de volgende syntaxis:
$([MSBuild]::GetPathOfFileAbove(string file, [string startingDirectory]))
waar file
is de naam van het bestand waarnaar moet worden gezocht en startingDirectory
is een optionele map waarin de zoekopdracht moet worden gestart. Standaard wordt de zoekopdracht gestart in de eigen map van het huidige bestand.
In dit voorbeeld ziet u hoe u een bestand met de naam dir.props in of boven de huidige map importeert, alleen als er een overeenkomst wordt gevonden:
<Import Project="$([MSBuild]::GetPathOfFileAbove(dir.props))" Condition=" '$([MSBuild]::GetPathOfFileAbove(dir.props))' != '' " />
die functioneel gelijk is aan
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))' != '' " />
Soms moet u echter de zoekopdracht in de bovenliggende map starten om te voorkomen dat er een overeenkomst is met het huidige bestand. In dit voorbeeld ziet u hoe een bestand Directory.Build.props het dichtstbijzijnde Bestand Directory.Build.props kan importeren in een strikt hoger niveau van de structuur, zonder recursief zichzelf te importeren:
<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))" />
die functioneel gelijk is aan
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove('$(MSBuildThisFileDirectory)../', 'Directory.Build.props'))/Directory.Build.props" />
MSBuild GetRegistryValue
De eigenschapsfunctie MSBuild GetRegistryValue
retourneert de waarde van een registersleutel. Deze functie heeft twee argumenten, de sleutelnaam en de waardenaam, en retourneert de waarde uit het register. Als u geen waardenaam opgeeft, wordt de standaardwaarde geretourneerd.
In de volgende voorbeelden ziet u hoe deze functie wordt gebruikt:
$([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
Waarschuwing
In de .NET SDK-versie van MSBuild (dotnet build
) wordt deze functie niet ondersteund.
MSBuild GetRegistryValueFromView
Met de eigenschapsfunctie van MSBuild GetRegistryValueFromView
worden systeemregistergegevens opgehaald op basis van de registersleutel, de waarde en een of meer geordende registerweergaven. De sleutel en waarde worden in elke registerweergave op volgorde doorzocht totdat ze zijn gevonden.
De syntaxis voor deze eigenschapsfunctie is:
[MSBuild]::GetRegistryValueFromView(string keyName, string valueName, object defaultValue, params object[] views)
Het Windows 64-bits besturingssysteem onderhoudt een HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node registersleutel met een HKEY_LOCAL_MACHINE\SOFTWARE registerweergave voor 32-bits toepassingen.
Een 32-bits toepassing die wordt uitgevoerd op WOW64 opent standaard de 32-bits registerweergave en een 64-bits toepassing opent de 64-bits registerweergave.
De volgende registerweergaven zijn beschikbaar:
Registerweergave | Definitie |
---|---|
RegistryView.Registry32 | De 32-bits toepassingsregisterweergave. |
RegistryView.Registry64 | De 64-bits toepassingsregisterweergave. |
RegistryView.Standaard | De registerweergave die overeenkomt met het proces waarop de toepassing wordt uitgevoerd. |
Hier volgt een voorbeeld.
$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Silverlight\v3.0\ReferenceAssemblies', 'SLRuntimeInstallPath', null, RegistryView.Registry64, RegistryView.Registry32))
haalt de SLRuntimeInstallPath-gegevens van de ReferenceAssemblies sleutel op, eerst in de 64-bits registerweergave en vervolgens in de 32-bits registerweergave.
Waarschuwing
In de .NET SDK-versie van MSBuild (dotnet build
) wordt deze functie niet ondersteund.
MSBuild MakeRelative
De eigenschapsfunctie MSBuild MakeRelative
retourneert het relatieve pad van het tweede pad ten opzichte van het eerste pad. Elk pad kan een bestand of map zijn.
Deze eigenschapsfunctie heeft de volgende syntaxis:
$([MSBuild]::MakeRelative($(FileOrFolderPath1), $(FileOrFolderPath2)))
De volgende code is een voorbeeld van deze syntaxis.
<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
De eigenschapsfunctie MSBuild StableStringHash
accepteert een tekenreeksargument en retourneert een hash-code die gegarandeerd stabiel is, wat betekent dat dezelfde code altijd wordt geretourneerd voor dezelfde tekenreeksinvoer. De geretourneerde hash is hetzelfde, ongeacht of MSBuild of dotnet build
wordt gebruikt, en is stabiel in de platformarchitectuur, in tegenstelling tot de .NET-methode GetHashCode
. Het is niet gegarandeerd stabiel in verschillende MSBuild-versies.
Deze functie is beschikbaar in MSBuild 16.9.0 of hoger.
In het volgende voorbeeld ziet u hoe deze functie wordt gebruikt.
<Project>
<PropertyGroup>
<MyHash>$([MSBuild]::StableStringHash("test1"))</MyHash>
</PropertyGroup>
<Target Name="WriteHash" AfterTargets="Build">
<Message Text="Hash: $(MyHash)"/>
</Target>
</Project>
Vanuit MSBuild versie 17.10.0 accepteert deze functie het tweede, optionele argument dat het hashing-algoritme moet worden gebruikt:
<Project>
<PropertyGroup>
<MyHash>$([MSBuild]::StableStringHash("test1", "Sha256"))</MyHash>
</PropertyGroup>
<Target Name="WriteHash" AfterTargets="Build">
<Message Text="Hash: $(MyHash)"/>
</Target>
</Project>
Het tweede argument is niet hoofdlettergevoelig en ondersteunt momenteel de volgende waarden:
- Legacy: behoudt hetzelfde gedrag als het aanroepen van de functie zonder het tweede argument. Retourneert een ondertekend geheel getal van 32 bits met vergelijkbare eigenschappen als
string.GetHashCode
. - Fnv1a32bit : retourneert een ondertekend 32-bits geheel getal dat een Fowler-Noll-Vo-hash van versie 1a van de opgegeven tekenreeks vertegenwoordigt.
- Fnv1a64bit : retourneert een ondertekend 64-bits geheel getal dat een Fowler-Noll-Vo-hash van versie 1a van de opgegeven tekenreeks vertegenwoordigt.
- Sha256 : retourneert een niet-voorgefixeerde hextekenreeks die een SHA256-hash van de opgegeven tekenreeks vertegenwoordigt.
MSBuild ValueOrDefault
De eigenschapsfunctie MSBuild ValueOrDefault
retourneert het eerste argument, tenzij deze null of leeg is. Als het eerste argument null of leeg is, retourneert de functie het tweede argument.
In het volgende voorbeeld ziet u hoe deze functie wordt gebruikt.
<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- en TargetPlatform-functies
MSBuild 16.7 en hoger definiëren verschillende functies voor het verwerken van de eigenschappen TargetFramework en TargetPlatform.
Functiehandtekening | Beschrijving |
---|---|
GetTargetFrameworkIdentifier(string targetFramework) |
Parseert de TargetFrameworkIdentifier van het TargetFramework. |
GetTargetFrameworkVersion(string targetFramework, int versionPartCount) |
Parseert de TargetFrameworkVersion van het TargetFramework. |
GetTargetPlatformIdentifier(string targetFramework) |
Parseert de TargetPlatformIdentifier van het TargetFramework. |
GetTargetPlatformVersion(string targetFramework, int versionPartCount) |
Parseert de TargetPlatformVersion van het TargetFramework. |
IsTargetFrameworkCompatible(string targetFrameworkTarget, string targetFrameworkCandidate) |
Geef 'waar' terug als het kandidaatdoelframework (tweede argument) compatibel is met het doelframework zoals aangegeven door het eerste argument, anders 'onwaar'. |
De versionPartCount
parameter van GetTargetFrameworkVersion
en GetTargetPlatformVersion
heeft een standaardwaarde van 2.
In het volgende voorbeeld ziet u hoe deze functies worden gebruikt.
<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-functies voor versievergelijking
MSBuild 16.5 en hoger definiëren verschillende functies voor het vergelijken van tekenreeksen die versies vertegenwoordigen.
Opmerking
Vergelijkingsoperatoren in voorwaarden kunnen tekenreeksen vergelijken die als objecten kunnen worden geparseerdSystem.Version
, maar de vergelijking kan onverwachte resultaten opleveren. Geef de voorkeur aan de eigenschapsfuncties.
Functiehandtekening | Beschrijving |
---|---|
VersionEquals(string a, string b) |
Retourneren true als versies a en b gelijkwaardig zijn volgens de onderstaande regels. |
VersionGreaterThan(string a, string b) |
Retourneer true als versie a groter is dan b volgens de onderstaande regels. |
VersionGreaterThanOrEquals(string a, string b) |
Retourneer true als versie a groter is dan of gelijk is aan b volgens de onderstaande regels. |
VersionLessThan(string a, string b) |
Retourneer true als versie a kleiner is dan b volgens de onderstaande regels. |
VersionLessThanOrEquals(string a, string b) |
Retourneer true als versie a kleiner is dan of gelijk is aan b volgens de onderstaande regels. |
VersionNotEquals(string a, string b) |
Retourneren false als versies a en b gelijkwaardig zijn volgens de onderstaande regels. |
In deze methoden worden versies geparseerd als System.Version, met de volgende uitzonderingen:
Voorloop
v
ofV
wordt genegeerd, waardoor vergelijking mogelijk is met$(TargetFrameworkVersion)
.Alles van de eerste '-' of '+' tot het einde van de versietekenreeks wordt genegeerd. Hierdoor kunnen semantische versies (semver) worden doorgegeven, hoewel de volgorde niet hetzelfde is als semver. In plaats daarvan hebben prereleaseaanduidingen en buildmetagegevens geen sorteergewicht. Dit kan bijvoorbeeld handig zijn om een functie voor
>= x.y
in te schakelen en deze effect te laten hebben opx.y.z-pre
.Niet-gespecificeerde onderdelen zijn hetzelfde als nul-waardeonderdelen. (
x == x.0 == x.0.0 == x.0.0.0
)Witruimte is niet toegestaan in gehele getallen.
Primaire versie is alleen geldig (
3
is gelijk aan3.0.0.0
)+
is niet toegestaan als positieve teken in gehele getallen (het wordt behandeld als semver metagegevens en genegeerd)
Aanbeveling
Vergelijkingen van TargetFramework-eigenschappen moeten over het algemeen IsTargetFrameworkCompatible gebruiken in plaats van versies te extraheren en te vergelijken. Dit maakt het mogelijk om TargetFramework
's te vergelijken die zowel in TargetFrameworkIdentifier
als in de versie variëren.
MSBuild-voorwaardefuncties
De functies Exists
en HasTrailingSlash
zijn geen eigenschapsfuncties. Ze zijn beschikbaar voor gebruik met het Condition
kenmerk. Zie MSBuild voorwaarden.
Verwante inhoud
Overzicht van MSBuild