.NET Standard je formální specifikace rozhraní .NET API, která jsou k dispozici v několika implementacích .NET. Motivací za rozhraním .NET Standard bylo vytvořit větší jednotnost v ekosystému .NET. .NET 5 a novější verze používají jiný přístup k vytvoření jednotnosti, která eliminuje potřebu .NET Standard ve většině scénářů. Pokud ale chcete sdílet kód mezi rozhraním .NET Framework a jakoukoli jinou implementací .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 a všechny novější verze budou nadále podporovat .NET Standard 2.1 a starší.
.NET Standard je verze. Každá nová verze přidává další rozhraní API. Pokud je knihovna postavena na určité verzi rozhraní .NET Standard, může běžet na jakékoli implementaci .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 ji lze použít pouze v novějších verzích .NET. Cílení na nižší verzi snižuje dostupná rozhraní API, ale znamená to, že knihovna může běžet na více místech.
1 Verze uvedené pro rozhraní .NET Framework platí pro sadu .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 Uvedené verze představují pravidla, která NuGet používá k určení, zda je daná knihovna .NET Standard použitelná. I když NuGet považuje .NET Framework 4.6.1 za podporu .NET Standard 1.5 až 2.0, existuje několik problémů s využíváním knihoven .NET Standard, které byly vytvořeny pro tyto verze z projektů .NET Framework 4.6.1. Pro projekty rozhraní .NET Framework, které potřebují takové knihovny používat, doporučujeme upgradovat projekt tak, aby cílil na rozhraní .NET Framework 4.7.2 nebo vyšší.
Další informace najdete v tématu .NET Standard 1.5. Interaktivní tabulku najdete v tématu Verze .NET Standard.
.NET Standard 1.6 má 13 501 z 37 118 dostupných rozhraní API.
1 Verze uvedené pro rozhraní .NET Framework platí pro sadu .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 Uvedené verze představují pravidla, která NuGet používá k určení, zda je daná knihovna .NET Standard použitelná. I když NuGet považuje .NET Framework 4.6.1 za podporu .NET Standard 1.5 až 2.0, existuje několik problémů s využíváním knihoven .NET Standard, které byly vytvořeny pro tyto verze z projektů .NET Framework 4.6.1. Pro projekty rozhraní .NET Framework, které potřebují takové knihovny používat, doporučujeme upgradovat projekt tak, aby cílil na rozhraní .NET Framework 4.7.2 nebo vyšší.
Další informace najdete v tématu .NET Standard 1.6. Interaktivní tabulku najdete v tématu Verze .NET Standard.
.NET Standard 2.0 má 32 638 z 37 118 dostupných rozhraní API.
Implementace .NET
Podpora verzí
.NET a .NET Core
2.0, 2.1, 2.2, 3.0, 3.1, 5.0, 6.0, 7.0, 8.0, 9.0
.NET Framework 1
4.6.1 2, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Mono
5.4, 6.4
Xamarin.iOS
10.14, 12.16
Xamarin.Mac
3.8, 5.16
Xamarin.Android
8.0, 10.0
Univerzální platforma Windows
10.0.16299, TBD
Unity
2018.1
1 Verze uvedené pro rozhraní .NET Framework platí pro sadu .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 Uvedené verze představují pravidla, která NuGet používá k určení, zda je daná knihovna .NET Standard použitelná. I když NuGet považuje .NET Framework 4.6.1 za podporu .NET Standard 1.5 až 2.0, existuje několik problémů s využíváním knihoven .NET Standard, které byly vytvořeny pro tyto verze z projektů .NET Framework 4.6.1. Pro projekty rozhraní .NET Framework, které potřebují takové knihovny používat, doporučujeme upgradovat projekt tak, aby cílil na rozhraní .NET Framework 4.7.2 nebo vyšší.
Další informace najdete v tématu .NET Standard 2.0. Interaktivní tabulku najdete v tématu Verze .NET Standard.
.NET Standard 2.1 má 37 118 z 37 118 dostupných rozhraní API.
Implementace .NET
Podpora verzí
.NET a .NET Core
3.0, 3.1, 5.0, 6.0, 7.0, 8.0, 9.0
.NET Framework 1
Není k dispozici2
Mono
6.4
Xamarin.iOS
12.16
Xamarin.Mac
5.16
Xamarin.Android
10.0
Univerzální platforma Windows
Není k dispozici3
Unity
2021.2
1 Verze uvedené pro rozhraní .NET Framework platí pro sadu .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.
Další informace naleznete v tématu .NET Standard 2.1. Interaktivní tabulku najdete v tématu Verze .NET Standard.
Která verze .NET Standard se má cílit
Pokud cílíte na .NET Standard, doporučujeme, abyste cílili na .NET Standard 2.0, pokud nepotřebujete podporovat starší verzi. Většina knihoven pro obecné účely by neměla potřebovat rozhraní API mimo .NET Standard 2.0 a rozhraní .NET Framework nepodporuje rozhraní .NET Standard 2.1. .NET Standard 2.0 je podporován všemi moderními platformami a je doporučeným způsobem, jak podporovat více platforem s jedním cílem.
Pokud potřebujete podporovat .NET Standard 1.x, doporučujeme také cílit na .NET Standard 2.0. .NET Standard 1.x se distribuuje jako podrobná sada balíčků NuGet, která vytvoří rozsáhlý graf závislostí balíčků a při vytváření projektu se stahuje velké množství 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.
Poznámka
Od verze .NET 9 se vygeneruje upozornění sestavení, pokud projekt cílí na .NET Standard 1.x. Další informace naleznete v tématu Upozornění generované pro cíle .NET Standard 1.x.
Pravidla správy verzí .NET Standard
Existují dvě primární pravidla správy verzí:
Sčítání: Verze .NET Standard jsou logicky soustředné kruhy: vyšší verze zahrnují všechna rozhraní API z předchozích verzí. Mezi verzemi nejsou žádné zásadní změny.
Neměnné: Po odeslání se verze .NET Standard zablokují.
Po verzi 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. Specifikaci udržují implementátoři .NET, konkrétně Microsoft (včetně rozhraní .NET Framework, .NET Core a Mono) a Unity.
Oficiální artefakty
Oficiální specifikace je sada .cs souborů, které definují rozhraní API, která jsou součástí standardu. Adresář ref v úložišti dotnet/standard (nyní archivovaný) definuje rozhraní API .NET Standard.
Metapackage netStandard.Library (zdroj) popisuje sadu knihoven, které definují (v části) jednu nebo více verzí .NET Standard.
Daná komponenta, například System.Runtime, popisuje:
Část rozhraní .NET Standard (pouze její obor)
Pro tento obor je k sadě .NET Standard více verzí.
K dispozici jsou odvozené artefakty, které umožňují pohodlnější čtení a umožňují určité vývojářské scénáře (například pomocí kompilátoru).
Referenční sestavení distribuovaná jako balíčky NuGet a odkazovaná metabalíčem NETStandard.Library .
Reprezentace balíčku
Primárním distribučním vozidlem pro referenční sestavení .NET Standard jsou balíčky NuGet. Implementace se doručují různými způsoby, které jsou vhodné pro každou implementaci .NET.
Balíčky NuGet cílí na jednu nebo více architektur. Balíčky .NET Standard cílí na architekturu .NET Standard. Rozhraní .NET Standard můžete cílit například netstandard1.4pomocí monikeru kompaktního cílového netstandardrozhraní (TFM). Knihovny, které mají být spuštěny v několika implementacích rozhraní .NET, by měly cílit na rozhraní .NET Standard. Pro nejširší sadu rozhraní API cíl netstandard2.0, protože počet dostupných rozhraní API více než zdvojnásobil mezi .NET Standard 1.6 a 2.0.
Metapackage NETStandard.Library odkazuje na úplnou sadu balíčků NuGet, které definují .NET Standard. Nejběžnější způsob, jak cílit netstandard , je odkazování na tento metabalíč. Popisuje a poskytuje přístup ke knihovnám ~40 .NET a přidruženým rozhraním API, která definují .NET Standard. Můžete odkazovat na další balíčky, které cílí netstandard na získání přístupu k dalším rozhraním API.
Vytváření verzí
Specifikace není v jednotném čísle, ale lineární verze 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. Pro odebrání rozhraní API ze standardu neexistuje žádné zřízení.
.NET Standard není specifický pro žádnou implementaci .NET ani neodpovídá schématu správy verzí žádné z těchto implementací.
Jak jsme uvedli dříve, po verzi 2.1 nebudou k dispozici žádné nové verze .NET Standard.
Target .NET Standard
Knihovny .NET Standard můžete sestavit pomocí kombinace netstandard architektury a NETStandard.Library metabalíku.
Režim kompatibility rozhraní .NET Framework
Od verze .NET Standard 2.0 byl zaveden režim kompatibility rozhraní .NET Framework. Tento režim kompatibility umožňuje projektům .NET Standard odkazovat na knihovny rozhraní .NET Framework, jako by byly zkompilovány pro .NET Standard. Odkazování na knihovny rozhraní .NET Framework nefunguje pro všechny projekty, jako jsou knihovny, které používají rozhraní API služby Windows Presentation Foundation (WPF).
Další informace naleznete v tématu režim kompatibility rozhraní .NET Framework.
Pokud potřebujete ve svých projektech využívat pouze knihovny .NET Standard 2.0, můžete to udělat také v sadě Visual Studio 2015. Potřebujete však nainstalovaného klienta NuGet verze 3.6 nebo vyšší. Klienta NuGet pro Visual Studio 2015 si můžete stáhnout ze stránky pro stahování NuGet.
.NET 5+ a .NET Standard
.NET 5, .NET 6, .NET 7, .NET 8 a .NET 9 jsou jediné produkty s jednotnou sadou funkcí a rozhraní API, které lze použít pro desktopové aplikace Windows a multiplatformní konzolové aplikace, cloudové služby a weby. TfM .NET 9 například odrážejí tuto širokou škálu scénářů:
net9.0
Tento TFM je určený pro kód, který běží všude. S několika výjimkami zahrnuje pouze technologie, které fungují napříč platformami. Pro kód net9.0 .NET 9 nahradí oba netcoreapp i netstandard TFM.
net9.0-windows
Toto je příklad TFM specifického pro operační systém, který přidává funkce specifické pro operační systém ke všemu, na co net9.0 odkazuje.
Kdy cílit netx.0 vs. netstandard
Pro stávající kód, který cílí na .NET Standard 2.0 nebo novější, není nutné měnit TFM na net8.0 TFM nebo novější TFM. .NET 8 a .NET 9 implementují .NET Standard 2.1 a starší. Jediným důvodem k opětovnému cílení z .NET Standard na .NET 8 nebo novější je získání přístupu k více funkcím modulu runtime, jazykových funkcím nebo rozhraním API. Pokud například chcete použít C# 9, musíte cílit na .NET 5 nebo novější verzi. Pokud chcete získat přístup k novějším funkcím a mít knihovnu k dispozici pro další implementace .NET, můžete použít multitarget .NET a .NET Standard.
Poznámka
Pokud váš projekt cílí na .NET Standard 1.x, doporučujeme ho změnit na .NET Standard 2.0 nebo .NET 8 nebo novější. Další informace naleznete v tématu Upozornění generované pro cíle .NET Standard 1.x.
Tady jsou některé pokyny pro nový kód pro .NET 5+:
Komponenty aplikace
Pokud používáte knihovny k rozdělení aplikace do několika komponent, doporučujeme, abyste cílili net9.0. Pro zjednodušení je nejlepší zachovat všechny projekty, které tvoří vaši aplikaci ve stejné verzi .NET. Pak můžete předpokládat stejné funkce seznamu 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 podporovaná rozhraním .NET Framework, takže poskytuje dobrý dosah s poměrně velkou sadou funkcí. Nedoporučujeme cílit na .NET Standard 1.x, protože byste omezili dostupnou sadu funkcí pro minimální zvýšení dosahu.
Pokud nepotřebujete podporovat rozhraní .NET Framework, můžete cílit na .NET Standard 2.1 nebo .NET 9. Doporučujeme přeskočit .NET Standard 2.1 a přejít rovnou na .NET 9. Nejčastěji používané knihovny s více cíli pro .NET Standard 2.0 i .NET 5+. Podpora rozhraní .NET Standard 2.0 nabízí co největší dosah a podpora rozhraní .NET 5+ zajišťuje, že můžete využívat nejnovější funkce platformy pro zákazníky, kteří už jsou na platformě .NET 5 nebo novější.
Problémy s .NET Standard
Tady je několik problémů se standardem .NET, které pomáhají vysvětlit, proč jsou .NET 5 a novější verze lepší způsob sdílení kódu napříč platformami a úlohami:
Pomalé přidávání nových rozhraní API
Rozhraní .NET Standard bylo vytvořeno jako sada rozhraní API, kterou by všechny implementace .NET musely podporovat, takže existuje proces 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 aktuálních a budoucích platformách .NET. Výsledkem bylo, že pokud funkce zmeškala konkrétní verzi, možná budete muset několik let počkat, než se přidá do verze standardu. Pak byste čekali ještě déle, než bude nová verze .NET Standard široce podporovaná.
Řešení v .NET 5+: Při implementaci funkce je již k dispozici pro každou aplikaci a knihovnu .NET 5 nebo novější, protože základ kódu je sdílený. A protože mezi specifikací rozhraní API a její implementací není žádný rozdíl, můžete využívat nové funkce mnohem rychleji než u .NET Standard.
Složitá správa verzí
Oddělení specifikace rozhraní API od implementace vede ke komplexnímu mapování verzí specifikace rozhraní API a verzí implementace. Tato složitost je zřejmé v tabulce uvedené výše v tomto článku a pokyny, jak ji interpretovat.
Řešení v .NET 5+: Neexistuje žádné oddělení mezi specifikací rozhraní API .NET 5+ a její implementací. Výsledkem je zjednodušené schéma TFM. Pro všechny úlohy existuje jedna předpona TFM: net9.0 používá se pro knihovny, konzolové aplikace a webové aplikace. Jedinou variantou je přípona, která určuje rozhraní API specifická pro platformu pro konkrétní platformu, například net9.0-windows. Díky této konvenci vytváření názvů TFM můžete snadno zjistit, jestli daná aplikace může danou knihovnu používat. Není potřeba žádná tabulka s číslem verze, jako je ta pro .NET Standard.
Nepodporované výjimky platformy za běhu
.NET Standard zveřejňuje rozhraní API specifická pro platformu. Kód se může zkompilovat bez chyb a zdá se, že je přenosný na libovolnou platformu, i když není přenosný. Když běží na platformě, která nemá implementaci pro dané rozhraní API, zobrazí se chyby za běhu.
Řešení v .NET 5+: Sady SDK .NET 5+ obsahují analyzátory kódu, které jsou ve výchozím nastavení povolené. Analyzátor kompatibility platformy detekuje neúmyslné použití rozhraní API, která nejsou podporována na platformách, na kterých chcete běžet. Další informace najdete v tématu Analyzátor kompatibility platformy.
.NET Standard není zastaralá
.NET Standard je stále potřeba pro knihovny, které je možné používat v několika implementacích .NET. V následujících scénářích doporučujeme cílit na .NET Standard:
Slouží netstandard2.0 ke sdílení kódu mezi rozhraním .NET Framework a všemi ostatními implementacemi rozhraní .NET.
Slouží netstandard2.1 ke sdílení kódu mezi mono, Xamarinem a .NET Core 3.x.
Zdroj tohoto obsahu najdete na GitHubu, kde můžete také vytvářet a kontrolovat problémy a žádosti o přijetí změn. Další informace najdete v našem průvodci pro přispěvatele.
Zpětná vazba k produktu .NET
.NET je open source projekt. Vyberte odkaz pro poskytnutí zpětné vazby:
.NET je bezplatná opensourcová vývojářská platforma pro různé platformy umožňující vytvářet mnoho různých typů aplikací. S .NET můžete používat více jazyků, editorů a knihoven a vytvářet aplikace pro web, mobilní zařízení, desktopová zařízení, hry a IoT.