Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
.NET Standard az .NET API-k hivatalos specifikációja, amelyek több .NET implementációban is elérhetők. A Standard .NET mögött az volt a motiváció, hogy egységesebb legyen a .NET ökoszisztémában. .NET 5-ös és újabb verziók eltérő megközelítést alkalmaznak az egységesség kialakításához, amely a legtöbb forgatókönyvben szükségtelenné teszi .NET Standard használatát. Ha azonban kódot szeretne megosztani .NET Keretrendszer és bármely más .NET-implementáció, például a .NET Core között, a kódtárnak .NET Standard 2.0-t kell céloznia. Nem jelennek meg a .NET Standard új verziói, de .NET 5 és az összes későbbi verzió továbbra is támogatja .NET Standard 2.1-et és korábbi verziót.
A .NET 5+ és .NET Standard közötti választásról a jelen cikk későbbi, .NET 5+ és .NET Standard című szakaszában olvashat.
.NET Standard verziók
.NET Standard verziójú. Minden új verzió további API-kat ad hozzá. Ha egy kódtár a .NET Standard egy bizonyos verziójára épül, akkor bármely olyan .NET implementáción futtatható, amely implementálja az .NET Standard (vagy újabb) verzióját.
A .NET Standard magasabb verziójának megcélzása lehetővé teszi, hogy a kódtár több API-t használjon, de azt jelenti, hogy csak a .NET újabb verzióiban használható. Az alacsonyabb verzió megcélzása csökkenti a rendelkezésre álló API-kat, de azt jelenti, hogy a kódtár több helyen is futtatható.
.NET Standard verzió kiválasztása
.NET Standard 1.0 7949-et kínál a 37 118 elérhető API-ból.
| .NET implementáció | Verziótámogatás |
|---|---|
| .NET és .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-keretrendszer | 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 (Ha szükséges, adjon hozzá leírási kontextust a "Mono" szóhoz, ha az például orvosi vagy technológiai jelentéssel bír.) | 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, Még nem meghatározott |
| Egység | 2018.1 |
További információ: .NET Standard 1.0. Interaktív táblázatért lásd: .NET Standard verziók.
Melyik .NET Standard verziót célozzuk meg
Ha .NET Standardot céloz meg, javasoljuk, hogy .NET Standard 2.0-t célozzon meg, hacsak nem kell támogatnia egy korábbi verziót. A legtöbb általános célú kódtárnak nem kell .NET Standard 2.0-n kívüli API-kra, és .NET Keretrendszer nem támogatja .NET Standard 2.1-et. .NET Standard 2.0-t minden modern platform támogatja, és ez az ajánlott módja annak, hogy több platformot is támogatjon egyetlen célként.
Ha támogatnia kell a .NET Standard 1.x-et, javasoljuk, hogy a .NET Standard 2.0-t is célozza meg. .NET Standard 1.x a NuGet-csomagok részletes készleteként van elosztva, amely egy nagy csomagfüggőségi gráfot hoz létre, és a projekt létrehozásakor sok csomagot tölt le. További információ: Cross-platform targeting és .NET 5+ és .NET Standard a cikk későbbi részében.
Megjegyzés
.NET 9-től kezdve a rendszer figyelmeztetést ad ki a build során, ha a projekt a .NET Standard 1.x-et célozza meg. További információ: Az .NET Standard 1.x-célokhoz kibocsátott figyelmeztetés.
.NET Standard verziószámozási szabályok
Két elsődleges verziószámozási szabály létezik:
- Additív: .NET A standard verziók logikailag koncentrikus körök: a magasabb verziók a korábbi verziók összes API-ját tartalmazzák. A verziók között nincsenek kompatibilitástörő változások.
- Nem módosítható: A szállítás után .NET Standard verziók le vannak fagyasztva.
A 2.1 után nem lesznek új .NET Standard verziók. További információ: .NET 5+ és .NET Standard a cikk későbbi részében.
Specifikáció
A .NET Standard specifikáció az API-k szabványosított készlete. A specifikációt a .NET megvalósítók tartják karban, kifejezetten a Microsoft (beleértve a .NET Framework-t, a .NET Core-t és a Mono-t) és a Unity-t.
Hivatalos artefaktumok
A hivatalos specifikáció .cs fájlok készlete, amelyek meghatározzák a szabvány részét képező API-kat. A ref könyvtár a (most archivált) dotnet/standard adattárban határozza meg a .NET Standard API-kat.
A NETStandard.Library metapackage (source) azokat a kódtárakat ismerteti, amelyek (részben) egy vagy több .NET Standard verziót határoznak meg.
Egy adott összetevő, például System.Runtimea következőt írja le:
- A .NET Standard része (csak a hatóköre).
- A .NET Standard több verziója az adott hatókörhöz.
A származékos összetevők a kényelmesebb olvasás és bizonyos fejlesztői forgatókönyvek (például fordító használata) engedélyezéséhez érhetők el.
- API-lista Markdown formátumban.
- Referenciaszerelvények NuGet-csomagokként elosztva, és a NETStandard.Library metapackage hivatkozik rá.
Csomagábrázolás
A .NET Standard referenciakönyvtárak elsődleges elosztási módszere a NuGet-csomagok. A megvalósítások különböző módokon valósulnak meg, az egyes .NET implementációknak megfelelően.
A NuGet-csomagok egy vagy több keretrendszert céloznak meg. .NET Standard csomagok a ".NET Standard" keretrendszert célozzák. A .NET Standard keretrendszert a netstandardcompact target framework moniker (TFM), például netstandard1.4 használatával célozhatja meg. A .NET több implementációján futtatandó kódtáraknak a .NET Standard keretrendszerre kell irányulnia. Az API-k legszélesebb halmaza esetében a cél netstandard2.0, mivel a rendelkezésre álló API-k száma több mint kétszeresére nőtt .NET Standard 1.6 és 2.0 között.
A NETStandard.Library metapackage a Standard .NET definiáló NuGet-csomagok teljes készletére hivatkozik. A leggyakoribb módszer netstandard célzására ennek a metacsomagnak a hivatkozásával történik. Ismerteti és hozzáférést biztosít az .NET Standardot definiáló ~40 .NET kódtárhoz és társított API-hoz. További, célként kitűzött netstandard csomagokra hivatkozva további API-khoz is hozzáférhet.
Verziókezelés
A specifikáció nem egyedi, hanem lineárisan verziózott API-k készlete. A szabvány első verziója létrehozza az API-k alapkonfigurációját. A következő verziók api-kat adnak hozzá, és öröklik az előző verziók által definiált API-kat. Az API-k standardból való eltávolítására nincs megállapított rendelkezés.
.NET A Standard nem egyetlen .NET implementációra jellemző, és nem felel meg egyik implementáció verziószámozási sémájának sem.
Ahogy korábban említettük, a 2.1 után nem lesznek új .NET Standard verziók.
Célozza meg a .NET Standardot
A .NET Standard könyvtárakat a netstandard keretrendszer és a NETStandard.Library metacsomag kombinációjával hozhat létre.
.NET keretrendszer kompatibilitási módja
A .NET Standard 2.0-tól kezdve bevezettük a .NET-keretrendszer kompatibilitási módját. Ez a kompatibilitási mód lehetővé teszi, hogy .NET Standard-projektek .NET Keretrendszer-kódtárakra hivatkozzon, mintha .NET Standardhoz lettek volna lefordítva. A .NET keretrendszerkódtárakra való hivatkozás nem minden projektnél működik, például a Windows Presentation Foundation (WPF) API-kat használó kódtáraknál.
További információ: .NET Keretrendszer kompatibilitási módja.
.NET Standard kódtárak és Visual Studio
Ha .NET Standard kódtárakat szeretne létrehozni Visual Studio, győződjön meg arról, hogy a Visual Studio 2019-es vagy újabb verzió vagy Visual Studio 2017 15.3-s vagy újabb verziója telepítve van Windows.
Ha csak .NET Standard 2.0 kódtárakat kell használnia a projektjeiben, ezt a 2015-ös Visual Studio is megteheti. Azonban a NuGet-ügyfél 3.6-os vagy újabb verziójára van szükség. A 2015-ös Visual Studio NuGet-ügyfelet a NuGet-letöltések oldalról töltheti le.
.NET 5+ és .NET Standard
.NET 5, .NET 6, .NET 7, .NET 8, .NET 9 és .NET 10 egyetlen termék, amely egységes képességekkel és API-kkal rendelkezik, amelyek Windows asztali alkalmazásokhoz, platformfüggetlen konzolalkalmazásokhoz, felhőszolgáltatásokhoz és webhelyekhez használhatók. A .NET 10 TFM például a forgatókönyvek széles skáláját tükrözi:
net10.0Ez a TFM olyan kódhoz készült, amely mindenhol fut. Néhány kivételtől eltekintve csak olyan technológiákat tartalmaz, amelyek platformfüggetlenek.
net10.0-windowsEz egy olyan operációsrendszer-specifikus TFM- példa, amely operációsrendszer-specifikus funkciókat ad hozzá minden olyan funkcióhoz, amelyre
net10.0hivatkozik.
Mikor kell célba venni netx.0 vagy netstandard
Az .NET Standard 2.0-s vagy újabb verziót futtató meglévő kódok esetében nem kell a TFM-et net8.0 vagy újabb TFM-re módosítani. .NET 8, .NET 9 és .NET 10 implementálja .NET Standard 2.1 és korábbi verziót. Az egyetlen ok a .NET Standardról a .NET 8+-ra történő átirányításra az lenne, hogy hozzáférjünk több futtatókörnyezeti funkcióhoz, nyelvi funkcióhoz vagy API-hoz. A C# 9 használatához például .NET 5-ös vagy újabb verziót kell használnia. A .NET és a .NET Standard többcélú célzásával hozzáférhet az új funkciókhoz, miközben a könyvtára elérhető marad más .NET implementációk számára.
Megjegyzés
Ha a projekt .NET Standard 1.x-re irányul, javasoljuk, hogy célozza újra .NET Standard 2.0-ra vagy .NET 8+-ra. További információ: Az .NET Standard 1.x-célokhoz kibocsátott figyelmeztetés.
Az 5+.NET új kódjának néhány irányelve:
Alkalmazás-összetevők
Javasoljuk, hogy ha kódtárakat használ az alkalmazás több összetevőre való lebontásához, akkor a
net10.0-t célozza meg. Az egyszerűség kedvéért a legjobb, ha az alkalmazást alkotó összes projektet az .NET ugyanazon verzióján tartja. Ezután mindenhol ugyanazokat a BCL-funkciókat feltételezheti.Újrafelhasználható kódtárak
Ha olyan újrafelhasználható kódtárakat hoz létre, amelyeket a NuGeten szeretne szállítani, fontolja meg a kapcsolat és az elérhető funkciókészlet közötti kompromisszumot. .NET Standard 2.0 a .NET Framework által támogatott legújabb verzió, így elég nagy funkciókészlettel érhető el. Nem javasoljuk a .NET Standard 1.x célzását, mivel ezzel korlátozná a rendelkezésre álló funkciókészletet, és csak minimális elérést növelne.
Ha nem kell támogatnia .NET Keretrendszert, .NET Standard 2.1-et vagy .NET 10-et célozhat meg. Javasoljuk, hogy hagyja ki a .NET Standard 2.1-et, és lépjen egyenesen a .NET 10-be. A leggyakrabban használt könyvtárak több platformot céloznak meg .NET Standard 2.0 és .NET 5+ esetében. A .NET Standard 2.0 támogatása a lehető legtöbb elérést biztosítja, miközben a .NET 5+ támogatása garantálja, hogy a legújabb platformfunkciókat is kihasználhassa azoknál az ügyfeleknél, akik már a .NET 5+ verziót használják.
.NET Standard problémák
Íme néhány probléma a .NET Standardtal kapcsolatban, amelyek segítenek elmagyarázni, hogy miért .NET 5-ös és újabb verziók a jobb módszer a kódok platformok és számítási feladatok közötti megosztására:
Új API-k hozzáadásának lassúsága
.NET Standard olyan API-készletként lett létrehozva, amelyet minden .NET implementációnak támogatnia kell, ezért felülvizsgálati folyamat indult az új API-k hozzáadására vonatkozó javaslatokhoz. A cél csak az összes jelenlegi és jövőbeli .NET platformon implementálható API-k szabványosítása volt. Az eredmény az volt, hogy ha egy funkció kimaradt egy adott kiadásból, előfordulhat, hogy várhat néhány évet, mielőtt hozzáadták volna a Standard egy verziójához. Ezután még tovább várhat, amíg a .NET Standard új verziója széles körben támogatott lesz.
.NET 5+ megoldás: Egy funkció implementálásakor az már elérhető minden .NET 5+ alkalmazáshoz és könyvtárhoz, mert a kódbázis meg van osztva. Mivel az API specifikációja és implementációja között nincs különbség, sokkal gyorsabban használhatja ki az új funkciókat, mint a standard .NET.
Összetett verziószámozás
Az API-specifikációnak a implementációktól való elkülönítése összetett leképezést eredményez az API-specifikációk verziói és a megvalósítási verziók között. Ez az összetettség nyilvánvaló a cikkben korábban bemutatott táblázatban és az értelmezésre vonatkozó utasításokban.
Megoldás .NET 5+ esetén: A .NET 5+ API specifikációja és implementációja között nincs különválasztás. Az eredmény egy egyszerűsített TFM-séma. Az összes számítási feladathoz egyetlen TFM-előtag tartozik:
net10.0kódtárakhoz, konzolalkalmazásokhoz és webalkalmazásokhoz használatos. Az egyetlen változat egy utótag, amely egy adott platform platformspecifikus API-jait adja meg, példáulnet10.0-windows. Ennek a TFM-elnevezési konvenciónak köszönhetően könnyen megállapíthatja, hogy egy adott alkalmazás használhat-e egy adott kódtárat. Nincs szükség verziószámmal egyenértékű táblára, például a .NET Standard táblára.Platform által nem támogatott kivételek futásidőben
.NET Standard platformspecifikus API-kat tesz elérhetővé. Előfordulhat, hogy a kód hiba nélkül lefordítható, és úgy tűnik, hogy bármilyen platformon hordozható, még akkor is, ha nem hordozható. Ha olyan platformon fut, amely nem rendelkezik implementációval egy adott API-hoz, futásidejű hibákat fog kapni.
Megoldás a .NET 5+: Az .NET 5+ SDK-k alapértelmezés szerint engedélyezett kódelemzőket tartalmaznak. A platformkompatibilitás-elemző észleli a futtatni kívánt platformokon nem támogatott API-k véletlen használatát. További információ: Platformkompatibilitás-elemző.
.NET Standard nem elavult
.NET Standardra továbbra is szükség van a több .NET implementáció által használható kódtárakhoz. A .NET Standardot a következő forgatókönyvekben javasoljuk:
- A
netstandard2.0használatával kódot oszthat meg a .NET-keretrendszer és a .NET minden egyéb implementációja között. - A
netstandard2.1használatával kódot oszthat meg a Mono és .NET Core 3.x között.