Funkce vlastností
Funkce vlastností jsou volání metod .NET, které se zobrazují v definicích vlastností MSBuild. Na rozdíl od úkolů je možné použít funkce vlastností mimo cíle. Funkce vlastností se vyhodnocují při každém rozbalení vlastností nebo položek. U vlastností a položek mimo jakékoli cíle se proto funkce vlastností vyhodnocují před jakýmkoli cílovým spuštěním. U skupin vlastností a skupin položek uvnitř cílů se funkce vlastností vyhodnocují při vyhodnocování cíle.
Bez použití úloh NÁSTROJE MSBuild můžete číst systémový čas, porovnávat řetězce, odpovídat regulárním výrazům a provádět další akce ve skriptu sestavení. NÁSTROJ MSBuild se pokusí převést řetězec na číslo a číslo na řetězec a podle potřeby provede další převody.
Řetězcové hodnoty vrácené z funkcí vlastností mají speciální řídicí znaky . Pokud chcete, aby se hodnota zpracovávala, jako by byla vložena přímo do souboru projektu, použijte $([MSBuild]::Unescape())
k zrušení přehledu speciálních znaků.
Syntaxe funkce vlastnosti
Jedná se o tři druhy vlastností; každá funkce má jinou syntaxi:
- Funkce vlastností String (instance)
- Statické funkce vlastností
- Funkce vlastností NÁSTROJE MSBuild
Funkce vlastností řetězce
Všechny hodnoty vlastností sestavení jsou pouze řetězcové hodnoty. K práci s libovolnou hodnotou vlastnosti můžete použít metody řetězce (instance). Můžete například extrahovat název jednotky (první tři znaky) z vlastnosti sestavení, která představuje úplnou cestu pomocí tohoto kódu:
$(ProjectOutputFolder.Substring(0,3))
Statické funkce vlastností
Ve skriptu sestavení máte přístup ke statickým vlastnostem a metodám mnoha systémových tříd. Chcete-li získat hodnotu statické vlastnosti, použijte následující syntaxi, kde Class
je název systémové třídy a Property
je název vlastnosti.
$([Class]::Property)
Pomocí následujícího kódu můžete například nastavit vlastnost sestavení na aktuální datum a čas.
<Today>$([System.DateTime]::Now)</Today>
Pokud chcete volat statickou metodu, použijte následující syntaxi, kde Class
je název systémové třídy, Method
je název metody a (Parameters)
je seznam parametrů metody:
$([Class]::Method(Parameters))
Pokud chcete například nastavit vlastnost sestavení na nový identifikátor GUID, můžete použít tento skript:
<NewGuid>$([System.Guid]::NewGuid())</NewGuid>
Ve funkcích statických vlastností můžete pro tyto systémové třídy použít libovolnou veřejnou statickou metodu nebo vlastnost definovanou v .NET Standard 2.0:
- System.Byte
- System.Char
- System.Convert
- System.datetime
- System.DateTimeOffset (k dispozici ve verzi MSBuild 17.3 a vyšší)
- 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
Poznámka:
Metody a vlastnosti, které nejsou definovány v rozhraní .NET Standard 2.0, můžou být dostupné při použití nástroje MSBuild v prostředí, které je podporuje, ale není možné zaručit, že budou dostupné ve všech situacích. Z důvodů kompatibility se jim nejlépe vyhnete.
Kromě toho můžete použít následující statické metody a vlastnosti:
- 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
Funkce vlastností System.OperatingSystem
Funkce System.OperatingSystem
vlastností vrací informace o operačním systému, na kterém je spuštěn nástroj MSBuild. Pokud například projekt cílí na Linux a sestavíte ho v systému macOS, funkce vlastností vrátí informace o macOS.
V nástroji MSBuild spuštěném v rozhraní .NET (dotnet build
), budou všechny statické metody System.OperatingSystem
třídy volatelné jako statické funkce vlastností.
V nástroji MSBuild spuštěném v rozhraní .NET Framework (MSBuild.exe
) budou jako statické funkce vlastností volána pouze následující metody System.OperatingSystem
. Nástroj MSBuild je implementuje interně, protože System.OperatingSystem
je nedefinuje v rozhraní .NET Framework. Metody pro operační systémy, pro které neexistuje žádná sada .NET SDK, například System.OperatingSystem::IsTvOS
, nejsou volatelné.
- 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
Následující příklad ukazuje použití těchto funkcí vlastností.
<IsWindows>$([System.OperatingSystem]::IsWindows())</IsWindows>
Volání metod instance ve statických vlastnostech
Pokud přistupujete ke statické vlastnosti, která vrací instanci objektu, můžete vyvolat metody instance tohoto objektu. K vyvolání metody instance použijte následující syntaxi, kde Class
je název systémové třídy, Property
je název vlastnosti, Method
je název metody a (Parameters)
je seznam parametrů pro metodu:
$([Class]::Property.Method(Parameters))
Název třídy musí být plně kvalifikovaný s oborem názvů.
Pomocí následujícího kódu můžete například nastavit vlastnost sestavení na aktuální datum dnes.
<Today>$([System.DateTime]::Now.ToString('yyyy.MM.dd'))</Today>
Funkce vlastností NÁSTROJE MSBuild
K několika statickým metodám v sestavení je možné získat přístup k aritmetické, bitové logické a řídicí podpoře znaků. K těmto metodám se dostanete pomocí následující syntaxe, kde Method
je název metody a (Parameters)
je seznam parametrů metody.
$([MSBuild]::Method(Parameters))
Pokud například chcete sečíst dvě vlastnosti, které mají číselné hodnoty, použijte následující kód.
$([MSBuild]::Add($(NumberOne), $(NumberTwo)))
Tady je seznam funkcí vlastností MSBuild:
Podpis funkce | Popis |
---|---|
double Add(double a, double b) |
Přidejte dvě dvojité. |
long Add(long a, long b) |
Přidejte dva dlouhé. |
double Subtract(double a, double b) |
Odečítejte dvě dvojité. |
long Subtract(long a, long b) |
Odečítá dva dlouhé. |
double Multiply(double a, double b) |
Vynásobte dvě dvojité. |
long Multiply(long a, long b) |
Vynásobte dvě dlouhé délky. |
double Divide(double a, double b) |
Rozdělte dvě dvojité. |
long Divide(long a, long b) |
Dělit dva dlouhé. |
double Modulo(double a, double b) |
Modulo dvě dvojité. |
long Modulo(long a, long b) |
Modulo dva dlouhé. |
string Escape(string unescaped) |
Uvozujte řetězec podle pravidel escapingu nástroje MSBuild. |
string Unescape(string escaped) |
Oddělte řetězec podle pravidel pro zapouzdření nástroje MSBuild. |
int BitwiseOr(int first, int second) |
Proveďte bitovou operaci OR na prvním a druhém (první | sekundu). |
int BitwiseAnd(int first, int second) |
Proveďte bitovou akci AND na první a druhé (první a druhé). |
int BitwiseXor(int first, int second) |
Proveďte bitovou operaci XOR na prvním a druhém (první ^ sekundu). |
int BitwiseNot(int first) |
Proveďte bitovou NOT operaci (~first). |
bool IsOsPlatform(string platformString) |
Určete, zda je platformString aktuální platforma operačního systému . platformString musí být členem OSPlatform. |
bool IsOSUnixLike() |
Hodnota True, pokud je aktuální operační systém systémem Unix. |
string NormalizePath(params string[] path) |
Získá kanonický úplnou cestu zadané cesty a zajistí, že obsahuje správné znaky oddělovače adresářů pro aktuální operační systém. |
string NormalizeDirectory(params string[] path) |
Získá kanonický úplnou cestu zadaného adresáře a zajistí, že obsahuje správné znaky oddělovače adresářů pro aktuální operační systém a zároveň zajistí, že má koncové lomítko. |
string EnsureTrailingSlash(string path) |
Pokud daná cesta nemá koncové lomítko, přidejte ji. Pokud je cesta prázdný řetězec, neupravuje ho. |
string GetPathOfFileAbove(string file, string startingDirectory) |
Vyhledá a vrátí úplnou cestu k souboru v adresářové struktuře nad umístěním aktuálního souboru sestavení nebo na startingDirectory základě hodnoty , pokud je zadán. |
string GetDirectoryNameOfFileAbove(string startingDirectory, string fileName) |
Vyhledejte a vraťte adresář souboru v adresáři zadaném nebo v adresářové struktuře nad tímto adresářem. |
string MakeRelative(string basePath, string path) |
Dělá path relativní vzhledem k basePath . basePath musí být absolutní adresář. Pokud path nelze provést relativní, vrátí se doslovné doslovné. Podobá se Uri.MakeRelativeUri . |
string ValueOrDefault(string conditionValue, string defaultValue) |
Vrátí řetězec v parametru defaultValue pouze v případě, že je parametr conditionValue prázdný, jinak vrátí hodnotu conditionValue . |
string ConvertToBase64(string toEncode) |
Vrátí řetězec po převodu všech bajtů na základ 64 (alfanumerické znaky plus + a / ), končící na jeden nebo dva = . |
string ConvertFromBase64(string toDecode) |
Vrátí řetězec po převodu ze základu 64 (alfanumerické znaky plus + a / ), končící jednou nebo dvěma = . |
Vnořené funkce vlastností
Zkombinujte funkce vlastností, které tvoří složitější funkce, jak ukazuje následující příklad:
$([MSBuild]::BitwiseAnd(32, $([System.IO.File]::GetAttributes(tempFile))))
Tento příklad vrátí hodnotu FileAttributes.Archive
bit (32 nebo 0) souboru zadaného cestou tempFile
. Všimněte si, že výčtové hodnoty dat se v některých kontextech nezobrazují podle názvu. V předchozím příkladu musí být použita číselná hodnota (32). V jiných případech se v závislosti na očekávání volané metody musí použít hodnota výčtu dat. V následujícím příkladu je hodnota RegexOptionsvýčtu .ECMAScript
musí být použita, protože číselnou hodnotu nelze převést, protože tato metoda očekává.
<PropertyGroup>
<GitVersionHeightWithOffset>$([System.Text.RegularExpressions.Regex]::Replace("$(PrereleaseVersion)", "^.*?(\d+)$", "$1", "System.Text.RegularExpressions.RegexOptions.ECMAScript"))</GitVersionHeightWithOffset>
</PropertyGroup>
Metadata se také můžou objevit ve vnořených funkcích vlastností. Další informace najdete v tématu Dávkování.
MSBuild DoesTaskHostExist
Funkce DoesTaskHostExist
vlastnosti v nástroji MSBuild vrátí, zda je hostitel úlohy aktuálně nainstalován pro zadané hodnoty modulu runtime a architektury.
Tato funkce vlastnosti má následující syntaxi:
$([MSBuild]::DoesTaskHostExist(string theRuntime, string theArchitecture))
MSBuild EnsureTrailingSlash
Funkce EnsureTrailingSlash
vlastnosti v nástroji MSBuild přidá koncové lomítko, pokud ještě neexistuje.
Tato funkce vlastnosti má následující syntaxi:
$([MSBuild]::EnsureTrailingSlash('$(PathProperty)'))
MSBuild GetDirectoryNameOfFileAbove
Funkce vlastnosti MSBuild GetDirectoryNameOfFileAbove
vyhledá vzhůru adresář obsahující zadaný soubor počínaje zadaným adresářem (včetně). Vrátí úplnou cestu nejbližšího adresáře obsahujícího soubor, pokud je nalezen, jinak prázdný řetězec.
Tato funkce vlastnosti má následující syntaxi:
$([MSBuild]::GetDirectoryNameOfFileAbove(string startingDirectory, string fileName))
Tento příklad ukazuje, jak importovat nejbližší soubor EnlistmentInfo.props do aktuální složky nebo nad aktuální složkou, pouze pokud se najde shoda:
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), EnlistmentInfo.props))\EnlistmentInfo.props" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), EnlistmentInfo.props))' != '' " />
Všimněte si, že tento příklad lze napsat výstižněji pomocí GetPathOfFileAbove
funkce:
<Import Project="$([MSBuild]::GetPathOfFileAbove(EnlistmentInfo.props))" Condition=" '$([MSBuild]::GetPathOfFileAbove(EnlistmentInfo.props))' != '' " />
MSBuild GetPathOfFileAbove
Funkce vlastnosti MSBuild GetPathOfFileAbove
vyhledá vzhůru adresář obsahující zadaný soubor počínaje zadaným adresářem (včetně). Vrátí úplnou cestu nejbližšího odpovídajícího souboru, pokud je nalezen, jinak prázdný řetězec.
Tato funkce vlastnosti má následující syntaxi:
$([MSBuild]::GetPathOfFileAbove(string file, [string startingDirectory]))
kde file
je název souboru, který se má vyhledat, a startingDirectory
je volitelným adresářem pro spuštění hledání. Ve výchozím nastavení se hledání spustí ve vlastním adresáři aktuálního souboru.
Tento příklad ukazuje, jak importovat soubor s názvem dir.props do aktuálního adresáře nebo nad aktuálním adresářem, pouze pokud se najde shoda:
<Import Project="$([MSBuild]::GetPathOfFileAbove(dir.props))" Condition=" '$([MSBuild]::GetPathOfFileAbove(dir.props))' != '' " />
která je funkčně ekvivalentní
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" Condition=" '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))' != '' " />
Někdy ale potřebujete spustit vyhledávání v nadřazeném adresáři, abyste se vyhnuli porovnávání aktuálního souboru. Tento příklad ukazuje, jak může soubor Directory.Build.props importovat nejbližší soubor Directory.Build.props v přísně vyšší úrovni stromu bez rekurzivního importu samotného:
<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))" />
která je funkčně ekvivalentní
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove('$(MSBuildThisFileDirectory)../', 'Directory.Build.props'))/Directory.Build.props" />
MSBuild GetRegistryValue
Funkce vlastnosti MSBuild GetRegistryValue
vrátí hodnotu klíče registru. Tato funkce přebírá dva argumenty, název klíče a název hodnoty a vrací hodnotu z registru. Pokud nezadáte název hodnoty, vrátí se výchozí hodnota.
Následující příklady ukazují, jak se tato funkce používá:
$([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
Upozorňující
Ve verzi sady .NET SDK nástroje MSBuild (dotnet build
) není tato funkce podporována.
MSBuild GetRegistryValueFromView
Funkce vlastnosti MSBuild GetRegistryValueFromView
získá data systémového registru s ohledem na klíč registru, hodnotu a jedno nebo více seřazených zobrazení registru. Klíč a hodnota se prohledávají v každém zobrazení registru v pořadí, dokud se nenajdou.
Syntaxe této funkce vlastnosti je:
[MSBuild]::GetRegistryValueFromView(string keyName, string valueName, object defaultValue, params object[] views)
64bitový operační systém Windows udržuje klíč registru HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node , který představuje zobrazení registru HKEY_LOCAL_MACHINE\SOFTWARE pro 32bitové aplikace.
Ve výchozím nastavení 32bitová aplikace běžící na WOW64 přistupuje k 32bitovému zobrazení registru a 64bitová aplikace přistupuje k 64bitovému zobrazení registru.
K dispozici jsou následující zobrazení registru:
Zobrazení registru | Definice |
---|---|
RegistryView.Registry32 | Zobrazení 32bitového registru aplikace. |
RegistryView.Registry64 | Zobrazení 64bitového registru aplikace. |
RegistryView.Default | Zobrazení registru, které odpovídá procesu, na kterém je aplikace spuštěná. |
Například:
$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Silverlight\v3.0\ReferenceAssemblies', 'SLRuntimeInstallPath', null, RegistryView.Registry64, RegistryView.Registry32))
získá SLRuntimeInstallPath data referenceAssemblies klíč, hledá nejprve v 64bitovém zobrazení registru a pak v 32bitové zobrazení registru.
Upozorňující
Ve verzi sady .NET SDK nástroje MSBuild (dotnet build
) není tato funkce podporována.
MSBuild MakeRelative
Funkce vlastnosti MSBuild MakeRelative
vrátí relativní cestu druhé cesty vzhledem k první cestě. Každá cesta může být soubor nebo složka.
Tato funkce vlastnosti má následující syntaxi:
$([MSBuild]::MakeRelative($(FileOrFolderPath1), $(FileOrFolderPath2)))
Následující kód je příkladem této syntaxe.
<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
Funkce vlastnosti MSBuild StableStringHash
přijímá argument řetězce a vrací kód hash, který je zaručen stabilní, což znamená, že stejný kód je vždy vrácen pro stejný řetězcový vstup. Vrácená hodnota hash je stejná bez ohledu na to, zda se msBuild nebo dotnet build
používá, a je stabilní napříč architekturou platformy, na rozdíl od metody GetHashCode
.NET . Není zaručeno, že bude stabilní v různých verzích NÁSTROJE MSBuild.
Tato funkce je dostupná ve verzi MSBuild 16.9.0 nebo novější.
Následující příklad ukazuje, jak se tato funkce používá.
<Project>
<PropertyGroup>
<MyHash>$([MSBuild]::StableStringHash("test1"))</MyHash>
</PropertyGroup>
<Target Name="WriteHash" AfterTargets="Build">
<Message Text="Hash: $(MyHash)"/>
</Target>
</Project>
Z MSBuild verze 17.10.0 tato funkce přijímá druhý volitelný argument, který požaduje algoritmus hash, který se má použít:
<Project>
<PropertyGroup>
<MyHash>$([MSBuild]::StableStringHash("test1", "Sha256"))</MyHash>
</PropertyGroup>
<Target Name="WriteHash" AfterTargets="Build">
<Message Text="Hash: $(MyHash)"/>
</Target>
</Project>
Druhý argument nerozlišuje velká a malá písmena a aktuálně podporuje následující hodnoty:
- Starší verze – zachová stejné chování jako volání funkce bez druhého argumentu. Vrátí 32bitové celé číslo s podobnými vlastnostmi jako
string.GetHashCode
. - Fnv1a32bit – vrátí 32bitové celé číslo se znaky 32bit představující hodnotu hash Fowler–Noll–Vo hodnoty hash verze 1a daného řetězce.
- Fnv1a64bit – vrátí 64bitové celé číslo představující hodnotu hash Fowler–Noll–Vo hodnoty hash verze 1a daného řetězce.
- Sha256 – Vrátí nepřefixovaný šestnáctkový řetězec představující hodnotu hash SHA256 daného řetězce.
MSBuild ValueOrDefault
Funkce vlastnosti MSBuild ValueOrDefault
vrátí první argument, pokud není null nebo prázdný. Pokud je první argument null nebo prázdný, vrátí funkce druhý argument.
Následující příklad ukazuje, jak se tato funkce používá.
<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
-->
Funkce TARGETFramework a TargetPlatform nástroje MSBuild
MSBuild 16.7 a vyšší definují několik funkcí pro zpracování vlastností TargetFramework a TargetPlatform.
Podpis funkce | Popis |
---|---|
GetTargetFrameworkIdentifier(string targetFramework) |
Parsujte TargetFrameworkIdentifier z objektu TargetFramework. |
GetTargetFrameworkVersion(string targetFramework, int versionPartCount) |
Parsujte TargetFrameworkVersion z objektu TargetFramework. |
GetTargetPlatformIdentifier(string targetFramework) |
Parsujte TargetPlatformIdentifier z objektu TargetFramework. |
GetTargetPlatformVersion(string targetFramework, int versionPartCount) |
Parsujte TargetPlatformVersion z objektu TargetFramework. |
IsTargetFrameworkCompatible(string targetFrameworkTarget, string targetFrameworkCandidate) |
Vrátí hodnotu True, pokud je cílová architektura kandidáta (druhý argument) kompatibilní s cílovým rozhraním označeným prvním argumentem a v opačném případě nepravda. |
Parametr versionPartCount
GetTargetFrameworkVersion
a GetTargetPlatformVersion
má výchozí hodnotu 2.
Následující příklad ukazuje, jak se tyto funkce používají.
<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
Funkce porovnání verzí nástroje MSBuild
MSBuild 16.5 a vyšší definují několik funkcí pro porovnání řetězců, které představují verze.
Poznámka:
Operátory porovnání v podmínkách mohou porovnávat řetězce, které lze analyzovat jako System.Version
objekty, ale porovnání může vést k neočekávaným výsledkům. Upřednostňujte funkce vlastností.
Podpis funkce | Popis |
---|---|
VersionEquals(string a, string b) |
Vraťte true se, pokud verze a odpovídají b následujícím pravidlům. |
VersionGreaterThan(string a, string b) |
Vraťte true se, pokud je verze a větší než b podle následujících pravidel. |
VersionGreaterThanOrEquals(string a, string b) |
Vraťte true se, pokud je verze a větší nebo rovna b podle následujících pravidel. |
VersionLessThan(string a, string b) |
Pokud je verze a menší než b podle následujících pravidel, vraťte true se. |
VersionLessThanOrEquals(string a, string b) |
Vraťte se true , pokud je verze a menší nebo rovna b podle následujících pravidel. |
VersionNotEquals(string a, string b) |
Vraťte false se, pokud verze a odpovídají b následujícím pravidlům. |
V těchto metodách jsou verze analyzovány jako System.Version, s následujícími výjimkami:
Počáteční
v
neboV
je ignorován, což umožňuje porovnání$(TargetFrameworkVersion)
s .Vše od prvního řetězce "-" nebo "+" na konec řetězce verze se ignoruje. To umožňuje předávání sémantických verzí (semver), i když pořadí není stejné jako semver. Místo toho specifikátory předběžné verze a metadata sestavení nemají žádnou váhu řazení. To může být užitečné například pro zapnutí funkce
>= x.y
a jeho zapnutíx.y.z-pre
.Nezadané části jsou stejné jako části nulové hodnoty. (
x == x.0 == x.0.0 == x.0.0.0
).Prázdné znaky nejsou povoleny v celočíselné komponentě.
Hlavní verze je platná (
3
rovná se3.0.0.0
)+
není povoleno jako kladné celočíselné komponenty (považuje se za metadata semver a ignorováno).
Tip
Porovnání vlastností TargetFramework by obecně měly používat IsTargetFrameworkCompatible místo extrakce a porovnávání verzí. To umožňuje porovnávat TargetFramework
hodnoty, které se liší i ve TargetFrameworkIdentifier
verzi.
Funkce podmínek nástroje MSBuild
Exists
Funkce a HasTrailingSlash
nejsou funkcemi vlastností. Jsou k dispozici pro použití s atributem Condition
. Viz podmínky nástroje MSBuild.