.NET Standard

.NET Standard je formální specifikace rozhraní API .NET, která jsou k dispozici pro více implementací rozhraní .NET. Motivace za .NET Standard byla v ekosystému .NET navázána větší jednotnost. Nicméně rozhraní .NET 5 přijme jiný přístup k založení jednotnosti a tento nový přístup eliminuje nutnost .NET Standard v mnoha scénářích. Další informace najdete v tématu .NET 5 a .NET Standard dále v tomto článku.

Podpora implementace rozhraní .NET

Různé implementace rozhraní .NET cílí na konkrétní verze .NET Standard. Každá verze implementace rozhraní .NET oznamuje nejvyšší .NET Standard verzi, kterou podporuje, příkaz, který znamená, že podporuje také předchozí verze. Například .NET Framework 4,6 implementuje .NET Standard 1,3, což znamená, že zpřístupňuje všechna rozhraní API definovaná v .NET Standard verzích 1,0 až 1,3. Podobně .NET Framework 4.6.1 implementuje .NET Standard 1,4, zatímco .NET 5,0 implementuje .NET Standard 2,1.

V následující tabulce jsou uvedeny minimální verze implementace, které podporují jednotlivé verze .NET Standard. To znamená, že novější verze uvedené implementace také podporují odpovídající verzi .NET Standard. Například .NET Core 2,1 a novější verze podporují .NET Standard 2,0 a starší verze.

.NET Standard 1.0 1.1 1.2 1.3 1.4 1.5 1.6 2.0 2.1
.NET 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0
.NET Core 1.0 1.0 1.0 1.0 1.0 1.0 1.0 2.0 3.0
.NET Framework 1 4.5 4.5 4.5.1 4,6 4.6.1 4.6.1 2 4.6.1 2 4.6.1 2 Není k dispozici3
Mono 4,6 4,6 4,6 4,6 4,6 4,6 4,6 5.4 6.4
Xamarin.iOS 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10,14 12,16
Xamarin.Mac 3,0 3,0 3,0 3,0 3,0 3,0 3,0 3.8 5,16
Xamarin.Android 7,0 7,0 7,0 7,0 7,0 7,0 7,0 8.0 10.0
Univerzální platforma Windows 10.0 10.0 10.0 10.0 10.0 10.0.16299 10.0.16299 10.0.16299 Bude doplněno
Unity 2018,1 2018,1 2018,1 2018,1 2018,1 2018,1 2018,1 2018,1 Bude doplněno

1 verze uvedené pro .NET Framework platí pro .NET Core 2,0 SDK a novější verze nástrojů. Starší verze používaly jiné mapování pro .NET Standard 1,5 a vyšší. Nástroje pro nástroje .NET Core pro Visual studio 2015 si můžete stáhnout, pokud nemůžete upgradovat na Visual Studio 2017 nebo novější verzi.

2 níže uvedené verze reprezentují pravidla, která nástroj NuGet používá k určení, jestli se konkrétní knihovna .NET Standard použít. I když NuGet vychází z .NET Framework 4.6.1 jako podpora .NET Standard 1,5 až 2,0, je k dispozici několik problémů se zachováním knihoven .NET Standard, které byly vytvořeny pro tyto verze z .NET Framework projektů 4.6.1. Pro .NET Framework projekty, které potřebují používat takové knihovny, doporučujeme upgradovat projekt na cílovou .NET Framework 4.7.2 nebo vyšší.

3 .NET Framework nepodporují .NET Standard 2,1. Další informace najdete v oznámení o .NET Standard 2,1.

  • Sloupce reprezentují .NET Standard verze. Každá buňka záhlaví je odkaz na dokument, který zobrazuje rozhraní API přidaná v této verzi .NET Standard.
  • Řádky reprezentují různé implementace rozhraní .NET.
  • Číslo verze v každé buňce určuje minimální verzi implementace, kterou budete potřebovat, aby bylo možné cílit na verzi .NET Standard.
  • Interaktivní tabulku najdete v tématu .NET Standard verze.

Pokud chcete najít nejvyšší verzi .NET Standard, na kterou můžete cílit, postupujte podle následujících kroků:

  1. Vyhledejte řádek, který označuje implementaci rozhraní .NET, na které chcete spustit.
  2. Vyhledá sloupec v tomto řádku, který indikuje, že vaše verze začíná zprava doleva.
  3. Záhlaví sloupce označuje .NET Standard verzi, kterou váš cíl podporuje. Můžete také cílit na jakoukoli nižší .NET Standard verzi. Vyšší verze .NET Standard budou podporovat i vaši implementaci.
  4. Tento postup opakujte pro každou platformu, kterou chcete cílit. Pokud máte více než jednu cílovou platformu, měli byste si z nich vybrat menší verzi. Například pokud chcete spustit v .NET Framework 4,8 a .NET 5,0, je nejvyšší .NET Standard verze, kterou můžete použít, .NET Standard 2,0.

Která .NET Standard cílová verze

Při volbě .NET Standard verze k cíli zvažte tento obchod:

  • Čím vyšší je verze, tím více rozhraní API je k dispozici pro kód vaší knihovny.
  • Čím nižší verze, tím víc aplikací a knihoven může vaše knihovna používat.

Doporučujeme cílit na co nejnižší verzi .NET Standard. Takže po nalezení nejvyšší .NET Standard verze, kterou můžete cílit, postupujte podle těchto kroků:

  1. Zaměřte se na další nižší verzi .NET Standard a sestavte svůj projekt.
  2. Pokud se projekt úspěšně sestaví, opakujte krok 1. V opačném případě přecílíte na další vyšší verzi a na verzi, kterou byste měli použít.

Cílení nižší verze .NET Standard ale přináší řadu závislostí podpory. Pokud je váš projekt cílen .NET Standard 1. x, doporučujeme také cílit .NET Standard 2,0. Tím se zjednoduší graf závislosti pro uživatele vaší knihovny, které běží na kompatibilních implementacích .NET Standard 2,0, a snižuje počet balíčků, které potřebují ke stažení.

Pravidla správy verzí .NET Standard

Existují dvě pravidla primárních verzí:

  • Doplňková: verze .NET Standard jsou logicky soustředné kroužky: vyšší verze obsahují všechna rozhraní API z předchozích verzí. Mezi verzemi nejsou žádné průlomové změny.
  • Neměnné: po odeslání se zmrazují .NET Standard verze.

Po 2,1 nebudou k dispozici žádné nové verze .NET Standard. Další informace najdete v tématu .NET 5 a .NET Standard dále v tomto článku.

Specifikace

Specifikace .NET Standard je standardizovaná sada rozhraní API. Specifikace je spravována implementací rozhraní .NET, konkrétně Microsoft (zahrnuje .NET Framework, .NET Core a mono) a Unity.

Oficiální artefakty

Oficiální specifikace je sada souborů . cs , které definují rozhraní API, která jsou součástí standardu. Adresář ref v úložišti dotnet/standard definuje rozhraní .NET Standard API.

NETStandard. Library Metapackage (zdroj) popisuje sadu knihoven, které definují (částečně) jednu nebo více .NET Standard verzí.

Daná součást, například System.Runtime , popisuje:

  • Součást .NET Standard (jenom její obor).
  • Více verzí .NET Standard pro tento rozsah.

K dispozici jsou odvozené artefakty, které umožňují pohodlnější čtení a povolují některé vývojářské scénáře (například pomocí kompilátoru).

Reprezentace balíčku

Primární distribuční vozidlo pro .NET Standard referenční sestavení jsou balíčky NuGet. Implementace jsou dodávány různými způsoby, které jsou vhodné pro každou implementaci rozhraní .NET.

Balíčky NuGet cílí na jednu nebo víc platforem. .NET Standard balíčky cílí na architekturu ".NET Standard". .NET Standard rozhraní můžete cílit pomocí netstandard kompaktního TFM (například netstandard1.4 ). Knihovny, které mají být spuštěny na více implementacích rozhraní .NET by měly cílit na toto rozhraní. Pro nejširší sadu rozhraní API cílíte, netstandard2.0 protože počet dostupných rozhraní API je více než dvojnásobný mezi .NET Standard 1,6 a 2,0.

NETStandard.LibraryMetapackage odkazuje na úplnou sadu balíčků NuGet, které definují .NET Standard. Nejběžnější způsob, jak se zaměřit, netstandard je odkazování na tento Metapackage. Popisuje a poskytuje přístup k knihovnám ~ 40 .NET a přidruženým rozhraním API, která definují .NET Standard. Na další balíčky, jejichž cílem je netstandard získat přístup k dalším rozhraním API, můžete odkazovat.

Správa verzí

Specifikace není v jednotném čísle, ale v lineárním znění sady rozhraní API. První verze standardu vytvoří základní sadu rozhraní API. Další verze přidávají rozhraní API a dědí rozhraní API definovaná předchozími verzemi. Neexistuje žádné zřízené zřízení pro odebrání rozhraní API ze standardu.

.NET Standard není specifické pro žádnou implementaci rozhraní .NET ani neodpovídá schématu správy verzí žádné z těchto implementací.

Jak bylo uvedeno dříve, po 2,1 nebudou k dispozici žádné nové verze .NET Standard.

Cílová .NET Standard

Knihovny .NET Standard lze vytvořit pomocí kombinace netstandard rozhraní a rozhraní NETStandard.Library Metapackage.

Režim kompatibility .NET Framework

Počínaje .NET Standard 2,0 byl zaveden režim kompatibility .NET Framework. Tento režim kompatibility umožňuje .NET Standard projektům odkazovat .NET Framework knihovny, jako kdyby byly zkompilovány pro .NET Standard. Odkazování na knihovny .NET Framework nefunguje pro všechny projekty, jako jsou knihovny, které používají rozhraní API Windows Presentation Foundation (WPF).

Další informace najdete v tématu režim kompatibility .NET Framework.

Knihovny .NET Standard a Visual Studio

Aby bylo možné sestavit knihovny .NET Standard v aplikaci Visual Studio, ujistěte se, že máte ve Windows nainstalovanou 15,3 verzi sady Visual studio 2019 nebo visual Studio 2017 nebo novější, nebo Visual Studio pro Mac verzi 7,1 nebo novější, která je nainstalovaná v MacOS.

Pokud v projektech potřebujete pouze využívat knihovny .NET Standard 2,0, můžete to provést také v aplikaci Visual Studio 2015. Potřebujete však nainstalovaného klienta NuGet 3,6 nebo vyšší. Klienta NuGet pro Visual Studio 2015 si můžete stáhnout ze stránky stažení NuGet .

.NET 5 a .NET Standard

.NET 5 je implementace .NET, kterou Microsoft aktivně vyvíjí. Jedná se o jediný produkt s jednotnou sadou schopností a rozhraní API, které je možné použít pro desktopové aplikace pro Windows a konzolové aplikace pro různé platformy, cloudové služby a weby. Rozhraní .NET 5,0 TFM odráží tuto širokou škálu scénářů:

  • net5.0

    Tento TFM je pro kód, který běží všude. Několik výjimek zahrnuje jenom technologie, které pracují na různých platformách. Pro kód .NET 5 net5.0 nahrazuje parametry netcoreapp a netstandard TFM.

  • net5.0-windows

    Toto je příklad TFM specifických pro operační systém , který přidává funkce specifické pro operační systém pro všechno, co net5.0 odkazuje na.

Kdy cílit na NET 5.0 vs. netstandard

Pro existující kód, který cílí netstandard , není nutné změnit TFM na net5.0 . .NET 5,0 implementuje .NET Standard 2,1 a starší. Jediným důvodem pro změny cíle od .NET Standard do .NET 5,0 by byl přístup k více funkcím modulu runtime, funkcím jazyka nebo rozhraním API. Například aby bylo možné používat C# 9, je nutné cílit na .NET 5,0. Pro přístup k novějším funkcím můžete použít více cílů .NET 5,0 a .NET Standard a máte i nadále k dispozici knihovnu pro jiné implementace rozhraní .NET.

Tady je několik pokynů pro nový kód pro .NET 5:

  • Komponenty aplikace

    Pokud používáte knihovny k rozdělení aplikace na několik součástí, doporučujeme, abyste se rozhodli, net5.x kde 5.x je nejstarší verze rozhraní .NET 5, na kterou může vaše aplikace cílit. Pro zjednodušení je nejlepší udržovat všechny projekty, které tvoří vaši aplikaci, na stejné verzi .NET. Pak můžete předpokládat stejné funkce BCL všude.

  • Opakovaně použitelné knihovny

    Pokud vytváříte opakovaně použitelné knihovny, které plánujete dodávat do NuGet, zvažte kompromis mezi dosahem a dostupnou sadou funkcí. .NET Standard 2,0 je nejnovější verze, kterou podporuje .NET Framework, takže má dobrý dosah s poměrně velkou sadou funkcí. Nedoporučujeme cílit .NET Standard 1. x, protože byste omezili dostupnou sadu funkcí pro minimální nárůst dostupnosti.

    Pokud nepotřebujete podporovat .NET Framework, můžete přejít .NET Standard 2,1 nebo .NET 5. Doporučujeme přeskočit .NET Standard 2,1 a přejít rovnou na rozhraní .NET 5. Nejčastěji používané knihovny ukončí cílení na více .NET Standard 2,0 i .NET 5. Podpora .NET Standard 2,0 poskytuje nejvíce přístupu, zatímco podpora .NET 5 zajistí, že budete moci využívat nejnovější funkce platformy pro zákazníky, kteří jsou již v rozhraní .NET 5.

Problémy s .NET Standard

Tady jsou některé problémy s .NET Standard, které vám pomůžou vysvětlit, proč je .NET 5 lepší způsob, jak sdílet kód napříč platformami a úlohami:

  • Zpomalení při přidávání nových rozhraní API

    .NET Standard byla vytvořena jako sada rozhraní API, kterou by musely podporovat všechny implementace rozhraní .NET, a proto existoval postup kontroly návrhů pro přidání nových rozhraní API. Cílem bylo standardizovat pouze rozhraní API, která by mohla být implementována ve všech současných a budoucích platformách .NET. Výsledkem bylo, že pokud funkce nenalezla určitou verzi, může být nutné počkat několik let, než bude přidáno do verze Standard. Pak můžete počkat ještě déle, než se nová verze .NET Standard široce podporuje.

    Řešení v rozhraní .NET 5: Když je funkce implementovaná, je pro každou aplikaci a knihovnu .NET 5 k dispozici, protože se jedná o sdílený základ kódu. A vzhledem k tomu, že mezi specifikací rozhraní API a jeho implementací není žádný rozdíl, můžete využít výhod nových funkcí mnohem rychleji než u .NET Standard.

  • Složitá Správa verzí

    Oddělení specifikací rozhraní API z jeho implementací má za následek složité mapování mezi verzemi specifikací rozhraní API a prováděcími verzemi. Tato složitost je zřejmá v tabulce uvedené dříve v tomto článku a pokyny, jak je interpretovat.

    Řešení v rozhraní .NET 5: Mezi specifikací rozhraní .NET 5. x API a jeho implementací není žádné oddělení. Výsledkem je zjednodušené schéma TFM. Pro všechny úlohy je k dispozici jedna předpona TFM: net5.0 používá se pro knihovny, konzolové aplikace a webové aplikace. Jediná variace je přípona, která určuje rozhraní API specifická pro konkrétní platformu, například net5.0-windows . Díky této TFM konvenci pojmenování můžete snadno určit, jestli daná aplikace může použít danou knihovnu. V případě potřeby není k dispozici žádná tabulka ekvivalentů čísla verze, jako je ta .NET Standard.

  • Nepodporované výjimky platformy v době běhu

    .NET Standard zveřejňuje rozhraní API specifická pro konkrétní platformu. Váš kód může být zkompilován bez chyb a jeví se jako přenosný na jakoukoli platformu i v případě, že není přenosný. Když běží na platformě, která nemá implementaci pro dané rozhraní API, získáte chyby za běhu.

    Řešení v rozhraní .NET 5: Sada .NET 5 SDK obsahuje analyzátory kódu, které jsou ve výchozím nastavení povoleny. Analyzátor kompatibility platformy detekuje neúmyslné použití rozhraní API, která nejsou podporovaná na platformách, na kterých máte v úmyslu běžet. Další informace najdete v tématu analyzátor kompatibility platforem.

.NET Standard není zastaralá

.NET Standard je stále potřeba pro knihovny, které lze použít v několika implementacích rozhraní .NET. Doporučujeme cílit .NET Standard v následujících scénářích:

  • Používá netstandard2.0 se ke sdílení kódu mezi .NET Framework a všemi ostatními implementacemi .NET.
  • Používá netstandard2.1 se ke sdílení kódu mezi mono, Xamarin a .NET Core 3. x.

Viz také