Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
.NET Standard je formální specifikace rozhraní API .NET, která jsou k dispozici v několika implementacích .NET. Motivací .NET Standard bylo stanovit větší jednotnost v ekosystému .NET. .NET 5 a novějších verzích používají jiný přístup k vytvoření jednotnosti, která eliminuje potřebu .NET standardu ve většině scénářů. Pokud ale chcete sdílet kód mezi .NET Framework a jakoukoli jinou implementací .NET, například .NET Core, měla by vaše knihovna cílit .NET Standard 2.0. Žádné nové verze .NET Standard nebudou vydány, ale .NET 5 a všechny novější verze budou nadále podporovat .NET Standard 2.1 a starší.
Informace o výběru mezi .NET 5 nebo novějšími a .NET Standard najdete v části .NET 5 nebo novější a .NET Standard dále v tomto článku.
verze .NET Standard
.NET Standard je verzovaný. Každá nová verze přidává další rozhraní API. Pokud je knihovna postavena na určité verzi .NET Standard, může běžet na libovolné .NET implementaci, 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.
Výběr .NET standardní 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, 7.0, 8.0, 9.0, 10.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, 4.8.1 |
| 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 |
| Universal Windows Platform | 8.0, 8.1, 10.0, 10.0.16299, TBD |
| Jednota | 2018.1 |
Další informace najdete v tématu .NET Standard 1.0. Interaktivní tabulku najdete v tématu .NET Standardní verze.
Na kterou verzi .NET Standardu se zaměřit
Pokud cílíte na .NET Standard, doporučujeme cílit na .NET Standard 2.0, pokud tedy 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 .NET Framework nepodporuje .NET Standard 2.1. .NET Standard 2.0 podporují všechny moderní platformy a doporučuje se podporovat více platforem s jedním cílem.
Pokud potřebujete podporovat .NET Standard 1.x, doporučujeme se zaměřit také 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ématech Cílení na více platforem a .NET 5 nebo novější a .NET Standard dále v tomto článku.
Poznámka:
Počínaje .NET 9 je vydáno upozornění při sestavování, pokud váš projekt cílí na .NET Standard 1.x. Další informace najdete v části Varování pro cílové platformy .NET Standard 1.x.
pravidla správy verzí .NET Standard
Existují dvě primární pravidla správy verzí:
- Přídavek: Verze .NET Standard jsou logicky soustředné kruhy: vyšší verze obsahují všechny 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 žádné nové verze .NET Standard. Další informace najdete v části .NET 5+ a .NET Standard dále v tomto článku.
Specifikace
Specifikace .NET Standard je standardizovaná sada rozhraní API. Specifikace je udržována implementátory .NET, konkrétně Microsoft (zahrnuje .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 dotnet/standard repository definuje .NET standardní rozhraní API.
Metapackage NETStandard.Library (source) popisuje sadu knihoven, které definují (část) jednu nebo více .NET standardních verzí.
Daná komponenta, například System.Runtime, popisuje:
- Část .NET Standard (pouze její rozsah).
- Pro tento obor existuje více verzí .NET Standard.
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).
- Seznam rozhraní API v markdownu
- 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 .NET implementaci.
Balíčky NuGet cílí na jednu nebo více architektur. .NET balíčky Standard cílí na architekturu ".NET Standard". Rozhraní .NET Standard můžete cílit pomocí monikeru cílového rozhraní .NET Standard (TFM), například netstandard1.4. Knihovny, které mají být spuštěny v několika implementacích .NET, by měly cílit na architekturu .NET Standard. Pro nejširší sadu rozhraní API zaměřte se na netstandard2.0, protože počet dostupných rozhraní API se více než zdvojnásobil mezi .NET Standard 1.6 a 2.0.
Metabalíč NETStandard.Library odkazuje na úplnou sadu balíčků NuGet, které definují .NET Standard. Nejběžnější způsob, jak cílit netstandard, je odkazovat na tento metabalíček. 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é jsou zaměřeny na netstandard pro získání přístupu k dalším rozhraním API.
Vytváření verzí
Specifikace není jedinečná, ale představuje lineárně verzovanou sadu 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 žádné nové verze .NET Standard.
Target .NET Standard
Můžete vytvářet knihovny .NET Standard pomocí kombinace rámce netstandard a metabalíku NETStandard.Library.
režim kompatibility rozhraní .NET Framework
Počínaje verzí .NET Standard 2.0 byl zaveden režim kompatibility rozhraní .NET Framework. Tento režim kompatibility umožňuje .NET standardním projektům odkazovat na knihovny .NET Framework, jako by 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 viz režim kompatibility rozhraní .NET.
.NET standardní knihovny a Visual Studio
Pokud chcete v Visual Studio vytvářet .NET standardní knihovny, ujistěte se, že máte nainstalované Visual Studio 2019 nebo novější nebo Visual Studio 2017 verze 15.3 nebo novější na Windows.
Pokud potřebujete ve svých projektech využívat jenom knihovny .NET Standard 2.0, můžete to udělat i v 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 NuGet ke stažení.
.NET 5+ a .NET Standard
.NET 5, .NET 6, .NET 7, .NET 8, .NET 9 a .NET 10 jsou jediné produkty s jednotnou sadou funkcí a rozhraní API, které lze použít pro Windows desktopové aplikace a konzolové aplikace pro různé platformy, cloudové služby a weby. Například .NET 10 TFMs odráží tuto širokou škálu scénářů:
net10.0Tento TFM je určený pro kód, který běží všude. S několika výjimkami zahrnuje pouze technologie, které fungují napříč platformami.
net10.0-windowsToto je příklad TFM specifického pro OS, který přidává funkce specifické pro OS ke všemu, na co
net10.0odkazuje.
Kdy cílit netx.0 vs. netstandard
Pro stávající kód, který cílí na .NET standardu 2.0 nebo novější, není nutné měnit TFM na net8.0 nebo novější TFM. .NET 8, .NET 9 a .NET 10 implementují .NET Standard 2.1 a starší. Jediným důvodem, proč změnit cílení z .NET Standard na .NET 8 nebo novější, by bylo získat přístup k dalším 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. Můžete cílit na .NET a .NET Standard, abyste měli přístup k novějším funkcím a zároveň zachovali dostupnost vaší knihovny pro další implementace .NET.
Poznámka:
Pokud 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 najdete v části Varování pro cílové platformy .NET Standard 1.x.
Tady je několik pokynů 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
net10.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 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 .NET Framework, můžete cílit na .NET Standard 2.1 nebo .NET 10. Doporučujeme přeskočit .NET Standard 2.1 a přejít rovnou na .NET 10. Nejčastěji používané knihovny s více cíli pro .NET Standard 2.0 i .NET 5+. Podpora .NET Standard 2.0 vám poskytuje co největší dosah, zatímco podpora .NET 5+ zajišťuje, že můžete využívat nejnovější funkce platformy pro zákazníky, kteří už jsou na .NET 5+.
.NET standardní problémy
Tady jsou některé problémy s .NET Standard, které pomáhají vysvětlit, proč .NET 5 a novější verze představují lepší způsob sdílení kódu napříč platformami a úlohami:
Pomalé přidávání nových rozhraní API
.NET Standard byl vytvořen 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 stávajících a budoucích .NET platformách. 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+: Když je funkce implementována, je již k dispozici pro každou aplikaci a knihovnu .NET 5 nebo novější, protože kódová základna 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ž s .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.
Solution v .NET 5+: Mezi specifikací rozhraní API .NET 5+ a její implementací není žádné oddělení. Výsledkem je zjednodušené schéma TFM. Pro všechny úlohy existuje jedna předpona TFM:
net10.0použí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říkladnet10.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 tabulka ekvivalentů čísla verze, jako je tabulka pro .NET Standard.Výjimky nepodporované platformou 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 modulu runtime.
Solution 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 několika implementacemi .NET. V následujících scénářích doporučujeme cílit na .NET Standard:
- Ke sdílení kódu mezi rozhraním .NET a všemi ostatními implementacemi .NET použijte
netstandard2.0. - Pomocí
netstandard2.1můžete sdílet kód mezi Mono a .NET Core 3.x.