Sdílet prostřednictvím


Funkce vlastností

Funkce vlastností jsou volání metod .NET, které se vyskytují v definicích vlastností MSBuild. Obvykle je používáte k vytváření definic vlastností, které vyžadují složitější logiku.

Na rozdíl od úkolů je možné použít funkce vlastností mimo cíle. Funkce vlastností se vyhodnocují při každém rozšíření vlastností nebo položek. U vlastností a položek mimo jakékoli cíle jsou funkce vlastností a položek vyhodnoceny před spuštěním jakéhokoli cíle. U skupin vlastností a skupin položek uvnitř cílů se funkce vlastností vyhodnocují při spuštění cíle.

Bez použití úloh MSBuild můžete číst systémový čas, porovnávat řetězce, vyhodnocovat regulární výrazy 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í znaky v escape formátu. 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é vlastnosti
  • Funkce vlastností MSBuild

Funkce vlastností řetězce

Hodnoty všech vlastností sestavení jsou jen ř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é vlastnosti

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:

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:

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é.

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ý včetně jmenného prostoru.

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í MSBuild

K několika statickým metodám ve vašem sestavení lze přistoupit pro poskytnutí podpory aritmetických operací, bitových logických operací a únikových 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ě čísla typu double.
long Add(long a, long b) Přidejte dva čísla typu long.
double Subtract(double a, double b) Odečtěte dvě desetinná čísla.
long Subtract(long a, long b) Odečtěte dvě dlouhá celá čísla.
double Multiply(double a, double b) Vynásobte dvě čísla typu double.
long Multiply(long a, long b) Vynásobte dvě dlouhá čísla.
double Divide(double a, double b) Odečtěte dvě hodnoty typu double.
long Divide(long a, long b) Dělit dvě dlouhá celá čísla.
double Modulo(double a, double b) Modulo dvě dvojité.
long Modulo(long a, long b) Modulo operace dvou dlouhých čísel.
string Escape(string unescaped) Uvozujte řetězec podle pravidel unikání 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í | druhém).
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í ^ druhém).
int BitwiseNot(int first) Proveďte bitovou operaci NOT (~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á kanonickou úplnou cestu ze zadané cesty a zajišťuje, že obsahuje správné znaky oddělovače adresářů pro aktuální operační systém.
string NormalizeDirectory(params string[] path) Získá kanonizovanou úplnou cestu zadaného adresáře a upraví ji tak, aby obsahovala správné znaky oddělovače adresářů pro aktuální operační systém, a zároveň zajistí, že má na konci lomítko.
string EnsureTrailingSlash(string path) Pokud daná cesta nemá koncové lomítko, přidejte ji. Pokud je cesta prázdný řetězec, neupravuje ji.
string GetPathOfFileAbove(string file, string startingDirectory) Vyhledá a vrátí úplnou cestu k souboru v adresářové struktuře na a nad umístěním aktuálního souboru sestavení nebo na základě startingDirectory, 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 není možné provést relativní, vrátí se 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 Base64 (alfanumerické znaky plus + a /), ukončený jedním nebo dvěma =.
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 nelze v některých kontextech uvádět podle jména. V předchozím příkladu musí být místo toho 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ýčtového datového typu. 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 tak, jak 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 naleznete v tématu Dávkové zpracování.

MSBuild ZdaExistujeHostitelÚlohy

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 vlastnosti EnsureTrailingSlash v 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

Výstraha

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.Výchozí Zobrazení registru, které odpovídá procesu, na kterém je aplikace spuštěná.

Následuje příklad.

$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Silverlight\v3.0\ReferenceAssemblies', 'SLRuntimeInstallPath', null, RegistryView.Registry64, RegistryView.Registry32))

získá data SLRuntimeInstallPath z klíče ReferenceAssemblies, přičemž hledá nejprve ve 64bitovém zobrazení registru a pak ve 32bitovém zobrazením registru.

Výstraha

Ve verzi sady .NET SDK nástroje MSBuild (dotnet build) není tato funkce podporována.

MSBuild ZměňNaRelativní

Funkce vlastnosti MSBuild MakeRelative vrátí relativní cestu druhé cesty vzhledem k první cestě. Každá cesta může být souborem nebo složkou.

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á řetězcový argument a vrací hash kód, který je zaručen konstantní, což znamená, že pro stejný řetězec je vždy vrácen stejný kód. 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í napříč různými verzemi 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í podepsané 32bitové celé číslo představující Fowler–Noll–Vo hash verze '1a' daného řetězce.
  • Fnv1a64bit – vrátí podepsané 64bitové celé číslo představující Fowler–Noll–Vo hash verze '1a' pro zadaný řetězec.
  • 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 versionPartCountGetTargetFrameworkVersion 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, pokud verze a a b jsou ekvivalentní podle následujících pravidel.
VersionGreaterThan(string a, string b) Vraťte true, pokud je verze a větší než b podle následujících pravidel.
VersionGreaterThanOrEquals(string a, string b) Vraťte true, pokud je verze a větší nebo rovna b podle níže uvedených pravidel.
VersionLessThan(string a, string b) Vraťte true, pokud je verze a menší než b podle následujících pravidel.
VersionLessThanOrEquals(string a, string b) Vraťte true, pokud je verze a menší nebo rovna b podle následujících pravidel.
VersionNotEquals(string a, string b) Vraťte false, pokud verze a a b jsou ekvivalentní podle následujících pravidel.

V těchto metodách jsou verze analyzovány jako System.Version, s následujícími výjimkami:

  • Počáteční v nebo V je ignorováno, což umožňuje srovnání s $(TargetFrameworkVersion).

  • Vše od prvního "-" nebo "+" do konce řetězce verze se ignoruje. To umožňuje předávání sémantických verzí (semver), i když pořadí není stejné jako u semver. Místo toho specifikátory předběžné verze a metadata sestavení nemají žádnou váhu pro řazení. To může být užitečné například pro zapnutí funkce >= x.y a její aktivaci na 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ě.

  • Pouze hlavní verze je platná (3 se rovná 3.0.0.0)

  • + není povoleno jako kladné znaménko v celočíselných komponentách (považuje se za metadata semver a je ignorováno).

Návod

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ší TargetFrameworkIdentifier vlastnostmi i verzí.

Funkce podmínek nástroje MSBuild

Funkce Exists a HasTrailingSlash nejsou funkcemi vlastností. Jsou k dispozici pro použití s atributem Condition . Viz podmínky nástroje MSBuild.