A .NET 6 újdonságai

A .NET 6 a .NET 5-tel kezdődött .NET-egyesítési terv utolsó részeit biztosítja. A .NET 6 egyesíti az SDK-t, az alaptárakat és a futtatókörnyezetet mobil, asztali, IoT- és felhőalkalmazásokban. Az egyesítés mellett a .NET 6 ökoszisztéma a következő lehetőségeket kínálja:

  • Egyszerűsített fejlesztés: Az első lépések egyszerűek. A C# 10 új nyelvi funkciói csökkentik az íráshoz szükséges kód mennyiségét. A webes verembe és a minimális API-kba történő befektetésekkel egyszerűen írhat kisebb, gyorsabb mikroszolgáltatásokat.

  • Jobb teljesítmény: A .NET 6 a leggyorsabb teljes verem webes keretrendszer, amely csökkenti a számítási költségeket, ha a felhőben fut.

  • Végső hatékonyság: A .NET 6 és a Visual Studio 2022 gyors újratöltést, új Git-eszközt, intelligens kódszerkesztést, robusztus diagnosztikai és tesztelési eszközöket, valamint jobb csapatmunkát biztosít.

A .NET 6 három évig támogatott hosszú távú támogatásként (LTS).

Az előzetes verziójú funkciók alapértelmezés szerint le vannak tiltva. Az éles környezetben való használatuk szintén nem támogatott, és egy későbbi verzióban is eltávolíthatók. Az új RequiresPreviewFeaturesAttribute az előzetes verziójú API-k megjegyzésére szolgál, és egy megfelelő elemző riasztást küld, ha ezeket az előzetes verziójú API-kat használja.

A .NET 6-ot a Visual Studio 2022 és a Mac Visual Studio 2022 támogatja (és újabb verziók).

Ez a cikk nem tartalmazza a .NET 6 összes új funkcióját. Az összes új funkció megtekintéséhez és a cikkben felsorolt funkciókkal kapcsolatos további információkért tekintse meg a .NET 6 bejelentését ismertető blogbejegyzést.

Teljesítmény

A .NET 6 számos teljesítménybeli fejlesztést tartalmaz. Ez a szakasz a FileStream, a profilalapú optimalizálás és az AOT-fordítás fejlesztéseit sorolja fel. Részletes információkért tekintse meg a .NET 6 blogbejegyzés teljesítménybeli fejlesztéseit.

FileStream

A System.IO.FileStream típus újra lett írva a .NET 6-hoz, hogy jobb teljesítményt és megbízhatóságot biztosítson a Windowson. Most soha ne blokkolja a FileStream windowsos aszinkron I/O-hoz való létrehozást. További információkért tekintse meg a fájl I/O-fejlesztéseit a .NET 6 blogbejegyzésében.

Profilvezérelt optimalizálás

A profilalapú optimalizálás (PGO) segítségével a JIT-fordító optimalizált kódot hoz létre a leggyakrabban használt típusok és kódelérési utak alapján. A .NET 6 dinamikus PGO-t vezet be. A dinamikus PGO együttműködik a rétegzett fordítással, hogy tovább optimalizálja a kódot a 0. rétegben üzembe helyezett további rendszerezések alapján. A dinamikus PGO alapértelmezés szerint le van tiltva, de a DOTNET_TieredPGOkörnyezeti változóval engedélyezheti. További információkért lásd a JIT teljesítménybeli fejlesztéseit.

Kereszttáblák2

A .NET 6 bevezeti a Crossgen2-t, a Crossgen utódját, amely el lett távolítva. A Crossgen és a Crossgen2 olyan eszközök, amelyek előre összeállított (AOT) összeállítást biztosítanak az alkalmazások indítási idejének javítása érdekében. A Crossgen2 C++ helyett C#-ban van megírva, és olyan elemzéseket és optimalizálásokat hajthat végre, amelyek az előző verzióval nem voltak lehetségesek. További információ: Beszélgetés a Crossgen2-ről.

Arm64-támogatás

A .NET 6 kiadás támogatja a macOS Arm64 (vagy "Apple Silicon") és a Windows Arm64 operációs rendszereket natív Arm64-végrehajtáshoz és x64-emulációhoz. Emellett az x64- és Arm64 .NET-telepítők egymás mellett telepítenek. További információ: .NET-támogatás macOS 11-hez és Windows 11-hez Arm64-hez és x64-hez.

Gyakori elérésű újratöltés

A gyakori elérésű újratöltés funkcióval módosíthatja az alkalmazás forráskódját, és azonnal alkalmazhatja ezeket a módosításokat a futó alkalmazásra. A funkció célja a hatékonyság növelése azáltal, hogy elkerüli az alkalmazások szerkesztések közötti újraindítását. A gyakori újratöltés a Visual Studio 2022-ben és a parancssori dotnet watch eszközben érhető el. A gyakori újratöltés a .NET-alkalmazások legtöbb típusával, valamint a C#, a Visual Basic és a C++ forráskóddal működik. További információkért tekintse meg a Gyakori elérésű újratöltés blogbejegyzést.

.NET MAUI

A .NET többplatformos alkalmazás felhasználói felülete (.NET MAUI) még előzetes verzióban érhető el, 2022 első negyedévében megjelenik egy kiadási jelölt, 2022 második negyedévében pedig az általános rendelkezésre állás (GA). A .NET MAUI lehetővé teszi natív ügyfélalkalmazások létrehozását asztali és mobil operációs rendszerekhez egyetlen kódbázissal. További információkért lásd a .NET többplatformos alkalmazás felhasználói felületének frissítését ismertető blogbejegyzést.

C# 10 és sablonok

A C# 10 olyan újításokat tartalmaz, mint global using az irányelvek, a fájlhatókörű névtérdeklarációk és a rekordstruktúra. További információ: A C# 10 újdonságai.

Ezzel a munkával összhangban a C# .NET SDK-projektsablonjait modernizáltuk az új nyelvi funkciók használatára:

  • async Main Módszer
  • Legfelső szintű utasítások
  • Cél típusú új kifejezések
  • Implicit global using irányelvek
  • Fájlhatókörű névterek
  • Null értékű hivatkozástípusok

Ha hozzáadja ezeket az új nyelvi funkciókat a projektsablonokhoz, az új kód az engedélyezett funkciókkal kezdődik. A .NET 6-ra való frissítés azonban nem érinti a meglévő kódot. A sablonmódosításokról további információt a .NET SDK: C# projektsablonok modernizált blogbejegyzésében talál.

F# és Visual Basic

Az F# 6 számos fejlesztést tartalmaz az F# nyelvhez és az F# Interactivehoz. További információ: Az F# 6 újdonságai.

A Visual Basic továbbfejlesztette a Visual Studio és a Windows Forms projektindítási funkciójának előnyeit.

SDK-számítási feladatok

A .NET SDK méretének csökkentése érdekében egyes összetevők új, opcionális SDK-számítási feladatokba lettek helyezve. Ezek az összetevők közé tartozik a .NET MAUI és a Blazor WebAssembly AOT. Ha a Visual Studiót használja, az gondoskodik a szükséges SDK-számítási feladatok telepítéséről. Ha a .NET CLI-t használja, az új dotnet workload parancsokkal kezelheti a számítási feladatokat:

Parancs Leírás
dotnet számítási feladatok keresése Megkeresi az elérhető számítási feladatokat.
dotnet számítási feladat telepítése Egy megadott számítási feladatot telepít.
dotnet-számítási feladat eltávolítása Eltávolít egy megadott számítási feladatot.
dotnet számítási feladat frissítése Frissítések telepített számítási feladatokat.
dotnet számítási feladat javítása Újratelepíti az összes telepített számítási feladatot, hogy kijavítsa a hibás telepítést.
dotnet számítási feladatok listája A telepített számítási feladatok listája.

További információ: Választható SDK-számítási feladatok.

System.Text.Json API-k

A .NET 6-ban System.Text.Json számos fejlesztés történt, így most már "ipari szilárdságú" szerializálási megoldás.

Forrásgenerátor

A .NET 6 új forrásgenerátort ad hozzá a következőhöz System.Text.Json: . A forráslétrehozás több módon is használható JsonSerializer és konfigurálható. Javíthatja a teljesítményt, csökkentheti a memóriahasználatot, és megkönnyítheti a szerelvények vágását. További információ: A tükröződés vagy a forrásgenerálás kiválasztása a System.Text.Json-ban és a forrásgenerálás használata a System.Text.Jsonban.

Írható DOM

Új, írható dokumentumobjektum-modell (DOM) lett hozzáadva, amely kiegészíti a már meglévő írásvédett DOM-et. Az új API egyszerűsített szerializálási alternatívát kínál olyan esetekben, amikor egyszerű régi CLR-objektumtípusok (POCO) használata nem lehetséges. Emellett hatékonyan navigálhat egy nagy JSON-fa alszakaszára, és beolvashat egy tömböt, vagy deszerializálhat egy POCO-t az alszakaszból. A következő új típusok lettek hozzáadva az írható DOM támogatásához:

További információ: JSON DOM-választási lehetőségek.

IAsyncEnumerable szerializálás

System.Text.Json mostantól támogatja a példányokkal való IAsyncEnumerable<T> szerializálást és deszerializálást. Az aszinkron szerializálási módszerek számba helyezik az objektumgráfok példányait IAsyncEnumerable<T> , majd JSON-tömbökként szerializálják őket. A deszerializáláshoz hozzáadta az új metódust JsonSerializer.DeserializeAsyncEnumerable<TValue>(Stream, JsonSerializerOptions, CancellationToken) . További információ: IAsyncEnumerable szerializálás.

Egyéb új API-k

Új szerializálási felületek az érvényesítéshez és az alapértelmezett értékekhez:

További információ: Visszahívások.

Új tulajdonságrendezési attribútum:

Új módszer a "nyers" JSON írására:

Szinkron szerializálás és deszerializálás streambe:

Új lehetőség, amely figyelmen kívül hagy egy objektumot, ha a szerializálás során referenciaciklust észlel:

A szerializálással és deszerializálással System.Text.Jsonkapcsolatos további információkért lásd a JSON szerializálását és deszerializálását a .NET-ben.

HTTP/3

A .NET 6 tartalmazza a HTTP/3 előzetes verzióját, a HTTP új verzióját. A HTTP/3 a QUIC nevű új mögöttes kapcsolati protokoll használatával old meg néhány meglévő funkcionális és teljesítménybeli problémát. A QUIC gyorsabban létesít kapcsolatokat, és a kapcsolatok függetlenek az IP-címétől, lehetővé téve a mobil ügyfelek számára, hogy a Wi-fi és a mobilhálózatok között barangoljanak. További információ: HTTP/3 használata a HttpClient használatával.

ASP.NET Core

ASP.NET Core tartalmazza a minimális API-k fejlesztését, a Blazor WebAssembly-alkalmazásokhoz készült idő előtti (AOT) fordítást és az egyoldalas alkalmazásokat. Emellett a Blazor-összetevők mostantól renderelhetők a JavaScriptből, és integrálhatók a meglévő JavaScript-alapú alkalmazásokkal. További információt a ASP.NET Core 6 újdonságai című témakörben talál.

OpenTelemetry

A .NET 6 továbbfejlesztett támogatást nyújt az OpenTelemetria számára, amely olyan eszközök, API-k és SDK-k gyűjteménye, amelyek segítenek elemezni a szoftver teljesítményét és viselkedését. A névtér API-k System.Diagnostics.Metrics implementálják az OpenTelemetry Metrics API specifikációját. Például négy eszközosztály támogatja a különböző metrikák forgatókönyveit. A műszerosztályok a következők:

Biztonság

A .NET 6 előzetes verziójú támogatást biztosít két kulcsfontosságú biztonsági megoldáshoz: a Control-Flow Enforcement Technology (CET) és a "kizárólagos írási végrehajtás" (W^X).

A CET egy Intel-technológia, amely néhány újabb Intel- és AMD-processzorban érhető el. Olyan képességeket ad hozzá a hardverhez, amelyek védelmet nyújtanak a vezérlőfolyamat-eltérítési támadások ellen. A .NET 6 támogatja a CET-et Windows x64-alkalmazásokhoz, és kifejezetten engedélyeznie kell. További információ: .NET 6 kompatibilitás az Intel CET árnyékveremekkel.

A W^X minden .NET 6-os operációs rendszerrel elérhető, de alapértelmezés szerint csak az Apple Silicon esetében engedélyezett. A W^X letiltja a legegyszerűbb támadási útvonalat, mert lehetővé teszi, hogy a memóriaoldalak egyszerre legyenek írhatók és végrehajthatók.

IL-vágás

A saját üzemeltetésű üzemelő példányok vágása javult. A .NET 5-ben csak a fel nem használt szerelvények lettek levágva. A .NET 6 a nem használt típusok és tagok levágását is hozzáadja. Emellett a vágási figyelmeztetések, amelyek olyan helyekre figyelmeztetik, ahol a vágás eltávolíthatja a futtatáskor használt kódot, alapértelmezés szerint engedélyezve vannak. További információ: Önálló telepítések és végrehajtható fájlok vágása.

Kódelemzés

A .NET 6 SDK néhány új kódelemzőt tartalmaz, amelyek az API-kompatibilitással, a platformkompatibilitással, a vágásbiztonsággal, a sztringösszefűzésben és a felosztásban való használatukkal, a gyorsabb sztring API-kkal és a gyorsabb gyűjtési API-kkal kapcsolatosak. Az új (és eltávolított) elemzők teljes listáját lásd : Analyzer releases – .NET 6.

Egyéni platformvédők

A platformkompatibilitás-elemző például platformőrként ismeri fel Is<Platform> az OperatingSystem osztály OperatingSystem.IsWindows()metódusait. Az egyéni platformvédők engedélyezéséhez a .NET 6 két új attribútumot vezet be, amelyekkel a támogatott vagy nem támogatott platformnévvel jegyzetelhet mezőket, tulajdonságokat vagy metódusokat:

Windows Forms

Application.SetDefaultFont(Font) a .NET 6 új metódusa, amely az alapértelmezett betűtípust állítja be az alkalmazáson belül.

A C# Windows Forms-alkalmazások sablonjai frissültek, hogy támogassák global using az irányelveket, a fájlható névtereket és a null értékű referenciatípusokat. Emellett az alkalmazás bootstrap-kódját is tartalmazzák, amely csökkenti a sablonkódot, és lehetővé teszi a Windows Forms tervezőjének, hogy a tervezőfelületet az előnyben részesített betűtípusban jelenítse meg. A bootstrap-kód egy hívás ApplicationConfiguration.Initialize(), amely egy forrás által generált metódus, amely hívásokat bocsát ki más konfigurációs módszereknek, például Application.EnableVisualStyles(). Ezenkívül ha nem alapértelmezett betűtípust állít be az ApplicationDefaultFont MSBuild tulajdonságon keresztül, ApplicationConfiguration.Initialize() a rendszer hívást indít a következőre SetDefaultFont(Font): .

További információt a Windows Forms újdonságairól szóló blogbejegyzésben talál.

Forrás összeállítása

A .NET SDK összes forrását tartalmazó forráslap mostantól a .NET SDK-build terméke. Más szervezetek, például a Red Hat, létrehozhatják az SDK saját verzióját ezzel a forrásoldali tarball használatával.

Cél-keretrendszer-monikerek

További operációsrendszer-specifikus célkeret-monikerek (TFM-ek) lettek hozzáadva a .NET 6-hoz, net6.0-androidpéldául , net6.0-iosés net6.0-macos. További információ: .NET 5+ operációsrendszer-specifikus TFM-k.

Általános matematika

Az előzetes verzióban az operátorok általános típusok esetén használhatók a .NET 6-ban. A .NET 6 számos felületet vezet be, amelyek kihasználják a C# 10 új előzetes verziójú funkcióját, static abstract a felület tagjait. Ezek az interfészek különböző operátoroknak felelnek meg, IAdditionOperators például az operátort + képviselik. A felületek a System.Runtime.Experimental NuGet csomagban érhetők el. További információkért lásd az Általános matematikai blogbejegyzést.

NuGet-csomag érvényesítése

Ha Ön NuGet-kódtár-fejlesztő, az új csomagérvényesítési eszköz lehetővé teszi annak ellenőrzését, hogy a csomagok konzisztensek és jól formázottak-e. Meghatározhatja, hogy:

  • A csomagverziókban kompatibilitástörő változások lépnek fel.
  • A csomag minden futtatókörnyezet-specifikus implementációhoz ugyanazokat a nyilvános API-kat tartalmazza.
  • A cél-keretrendszer vagy a futtatókörnyezet alkalmazhatósága terén vannak hiányosságok.

További információkért tekintse meg a Csomagérvényesítés blogbejegyzést.

Önkifejezés ion API-k

A .NET 6 a következő új API-kat vezeti be, amelyek ellenőrzik a kódot, és nullability-információkat nyújtanak:

Ezek az API-k tükröződésalapú eszközök és szerializálók esetén hasznosak.

Microsoft.Extensions API-k

A .NET 6-ban számos bővítménynévtér fejlesztései vannak, ahogy az alábbi táblázat is mutatja.

Névtér Fejlesztések
Microsoft.Extensions.DependencyInjection CreateAsyncScope lehetővé teszi egy olyan szolgáltató utasításának biztonságos használatát using , amely regisztrál egy IAsyncDisposable szolgáltatást.
Microsoft.Extensions.Hosting Az új ConfigureHostOptions módszerek leegyszerűsítik az alkalmazások beállítását.
Microsoft.Extensions.Logging Microsoft.Extensions.Logging új forrásgenerátorsal rendelkezik a teljesítménynaplózási API-khoz. A forrásgenerátor akkor aktiválódik, ha hozzáadja az újat LoggerMessageAttribute egy naplózási partial módszerhez. Fordításkor a generátor létrehozza a partial metódus implementálását, amely általában futásidőben gyorsabb, mint a meglévő naplózási megoldások. További információ: Fordítási idő naplózási forrás létrehozása.

Új LINQ API-k

A .NET 6-ban számos LINQ-metódus lett hozzáadva. Az alábbi táblázatban felsorolt új metódusok többsége azonos típusú metódusokat System.Linq.Queryable tartalmaz.

Metódus Leírás
Enumerable.TryGetNonEnumeratedCount<TSource>(IEnumerable<TSource>, Int32) Megkísérli meghatározni a sorozat elemeinek számát enumerálás kényszerítése nélkül.
Enumerable.Chunk<TSource>(IEnumerable<TSource>, Int32) A sorozat elemeit egy megadott méretű adattömbökre osztja fel.
Enumerable.MaxBy és Enumerable.MinBy Kulcsválasztóval megkeresi a maximális vagy minimális elemeket.
Enumerable.DistinctBy, Enumerable.ExceptBy, Enumerable.IntersectByés Enumerable.UnionBy A beállításalapú műveleteket végrehajtó metódusok új változatai lehetővé teszik az egyenlőség megadását egy kulcsválasztó függvény használatával.
Enumerable.ElementAt<TSource>(IEnumerable<TSource>, Index) és Enumerable.ElementAtOrDefault<TSource>(IEnumerable<TSource>, Index) Fogadja a sorozat elejétől vagy végétől számított indexeket – például Enumerable.Range(1, 10).ElementAt(^2) visszaadja a függvényt 9.
Enumerable.FirstOrDefault<TSource>(IEnumerable<TSource>, TSource) és Enumerable.FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>, TSource)
Enumerable.LastOrDefault<TSource>(IEnumerable<TSource>, TSource) és Enumerable.LastOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>, TSource)
Enumerable.SingleOrDefault<TSource>(IEnumerable<TSource>, TSource) és Enumerable.SingleOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>, TSource)
Az új túlterhelések lehetővé teszik az alapértelmezett érték megadását, ha a sorozat üres.
Enumerable.Max<TSource>(IEnumerable<TSource>, IComparer<TSource>) és Enumerable.Min<TSource>(IEnumerable<TSource>, IComparer<TSource>) Az új túlterhelésekkel összehasonlítót adhat meg.
Enumerable.Take<TSource>(IEnumerable<TSource>, Range) Elfogad egy argumentumot Range , amely leegyszerűsíti a szekvenciák szeletelését – például használhatja source.Take(2..7) helyettük source.Take(7).Skip(2).
Enumerable.Zip<TFirst,TSecond,TThird>(IEnumerable<TFirst>, IEnumerable<TSecond>, IEnumerable<TThird>) Három megadott sorozat elemeit tartalmazó vonássorozatot hoz létre.

Dátum-, idő- és időzóna-fejlesztések

A .NET 6-ban a következő két struktúra lett hozzáadva: System.DateOnly és System.TimeOnly. Ezek a dátum és az időrészt DateTimejelölik. DateOnly születésnapok és évfordulók esetén hasznos, és TimeOnly hasznos a napi riasztásokhoz és a heti munkaidőhöz.

Mostantól használhatja az Internet Assigned Numbers Authority (IANA) vagy a Windows időzóna-azonosítóit bármely olyan operációs rendszeren, amelyen telepítve vannak az időzóna adatai. A TimeZoneInfo.FindSystemTimeZoneById(String) metódus frissült, hogy automatikusan átalakítsa a bemenetet egy Windows-időzónából IANA-időzónává (vagy fordítva), ha a kért időzóna nem található a rendszeren. Emellett az új módszereket TryConvertIanaIdToWindowsId(String, String)TryConvertWindowsIdToIanaId is hozzáadtuk a forgatókönyvekhez, amikor még manuálisan kell átalakítania az időzóna formátumát egy másikra.

Van még néhány más időzóna-fejlesztés is. További információ: Dátum, idő és időzóna fejlesztései a .NET 6-ban.

PriorityQueue osztály

Az új PriorityQueue<TElement,TPriority> osztály olyan elemek gyűjteményét jelöli, amelyeknek értéke és prioritása is van. Az elemeket növekvő prioritási sorrendben törli a rendszer, vagyis a legalacsonyabb prioritású elem lesz a lekérdezve. Ez az osztály minimális halom adatstruktúrát valósít meg.

Lásd még