.NET Standard

.NET Standard je formální specifikace rozhraní .NET API, která jsou k dispozici v několika implementacích rozhraní .NET. Motivací pro .NET Standard bylo vytvořit v ekosystému .NET větší jednotnost. Rozhraní .NET 5 a novější verze mají jiný přístup k zajištění jednotnosti, který eliminuje nutnost .NET Standard ve většině scénářů. Pokud ale chcete sdílet kód mezi službou .NET Framework a jakoukoli jinou implementací rozhraní .NET, jako je .NET Core, měla by vaše knihovna cílit na .NET Standard 2.0. Nebudou vydány žádné nové verze .NET Standard, ale .NET 5, .NET 6 a všechny budoucí verze budou i nadále podporovat .NET Standard 2.1 a starší.

Informace o volbě mezi .NET 5+ a .NET Standard najdete v části .NET 5+ a novější .NET Standard dále v tomto článku.

.NET Standard verze

.NET Standard verze. Každá nová verze přidá další rozhraní API. Když je knihovna sestavená proti určité verzi .NET Standard, může běžet na jakékoli implementaci rozhraní .NET, která implementuje tuto verzi .NET Standard (nebo vyšší).

Cílení na vyšší verzi .NET Standard umožňuje knihovně používat více rozhraní API, ale znamená to, že je možné ji použít pouze v novějších verzích rozhraní .NET. Cílení na nižší verzi snižuje dostupná rozhraní API, ale znamená, že knihovna může běžet na více místech.

Výběr .NET Standard verze

.NET Standard 1.0 má 7 949 z 37 118 dostupných rozhraní API.

Implementace .NET Podpora verzí
.NET a .NET Core 1.0, 1.1, 2.0, 2.1, 2.2, 3.0, 3.1, 5.0, 6.0
.NET Framework 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
Mono 4.6, 5.4, 6.4
Xamarin.iOS 10.0, 10.14, 12.16
Xamarin.Mac 3.0, 3.8, 5.16
Xamarin.Android 7.0, 8.0, 10.0
Univerzální platforma Windows 8.0, 8.1, 10.0, 10.0.16299, tbd
Unity 2018.1

Další informace najdete v tématu .NET Standard 1.0. Interaktivní tabulku najdete v .NET Standard verzích.

Která .NET Standard cílová verze

Doporučujeme cílit .NET Standard 2,0, pokud nepotřebujete podporovat starší verzi. Většina knihoven pro obecné použití by neměla vyžadovat rozhraní API mimo .NET Standard 2,0. .NET Standard 2,0 podporuje všechny moderní platformy a je doporučeným způsobem, jak podporovat více platforem s jedním cílem.

Pokud potřebujete podporu .NET Standard 1. x, doporučujeme také cílit .NET Standard 2,0. .NET Standard 1. x se distribuuje jako podrobná sada balíčků NuGet, která vytváří velký graf závislostí balíčků a má za následek, že vývojáři při sestavování stahují spoustu balíčků. Další informace najdete v tématu cílení na různé platformy a .NET 5 + a .NET Standard dále v tomto článku.

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 (nyní archivováno): definuje rozhraní API pro .NET Standard.

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

Daná součást, System.Runtime například, 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í je NuGet balíčky. Implementace jsou dodávány různými způsoby, které jsou vhodné pro každou implementaci rozhraní .NET.

NuGet balíčky cílí na jednu nebo více rozhraní. .NET Standard balíčky cílí na architekturu ".NET Standard". .NET Standard rozhraní můžete cílit pomocí netstandardnetstandard (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 NuGet balíčků, 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 netstandard je 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 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.

.NET Standard knihovny a Visual Studio

aby bylo možné sestavovat knihovny .NET Standard v Visual Studio, ujistěte se, že máte Visual Studio 2022, Visual Studio 2019nebo Visual Studio 2017 verze 15,3 nebo novější nainstalované v Windows nebo Visual Studio pro Mac verze 7,1 nebo novější je nainstalovaná v MacOS.

pokud v projektech potřebujete pouze využívat knihovny .NET Standard 2,0, můžete to provést také v Visual Studio 2015. je však potřeba nainstalovat klienta NuGet 3,6 nebo vyšší. klienta NuGet pro Visual Studio 2015 můžete stáhnout ze stránky NuGet ke stažení .

.NET 5 + a .NET Standard

.net 5 a .net 6 jsou jednotlivé produkty s jednotnou sadou funkcí a rozhraní api, které je možné použít pro Windows desktopové aplikace a konzolové aplikace pro různé platformy, cloudové služby a weby. Rozhraní .NET 5 TFMnapříklad odráží š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 net5.0 .NET 5 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 do všeho, co odkazuje na.

Kdy cílit na NET 5.0 nebo NET 6.0 vs. netstandard

Pro existující kód, který cílí netstandard , není nutné změnit TFM na net5.0 nebo net6.0 . .NET 5 a .NET 6 implementují .NET Standard 2,1 a starší. Jediným důvodem pro změny cíle od .NET Standard do .NET 5 + by bylo získat 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 rozhraní .NET 5 nebo novější. Můžete mít více cílů rozhraní .NET 5 nebo .NET 6 a .NET Standard získat přístup k novějším funkcím a stále mít 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 zacíleni net5.0 nebo net6.0 . 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 na NuGet, zvažte kompromis mezi dosahem a dostupnou sadou funkcí. .NET Standard 2,0 je nejnovější verze, kterou podporuje .NET Framework, takže poskytuje dobrý přístup 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 pomocí .NET Standard 2,1 nebo .net 5/6. Doporučujeme přeskočit .NET Standard 2,1 a přejít rovnou na rozhraní .NET 6. Nejčastěji používané knihovny budou mít více cílů pro .NET Standard 2,0 i .NET 5 +. Podpora .NET Standard 2,0 poskytuje nejvíce přístupu a podpora .NET 5 + zajišťuje, že můžete využívat nejnovější funkce platformy pro zákazníky, kteří jsou již na 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 rozhraní .NET 5 a novější verze 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 už dostupná pro každou aplikaci a knihovnu .NET 5 +, protože je 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í API .NET 5 + 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 nebo net6.0 se používá pro knihovny, konzolové aplikace a webové aplikace. Jediná variace je přípona, která určuje rozhraní API specifická pro konkrétní platformu, například nebo net6.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, třeba ta pro .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 +: Sady .NET 5 + SDK obsahují 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é