Sdílet prostřednictvím


Novinky v .NET 6

.NET 6 poskytuje poslední části plánu sjednocení .NET, který začal s .NET 5. .NET 6 sjednocuje sadu SDK, základní knihovny a modul runtime napříč mobilními, desktopovými, ioT a cloudovými aplikacemi. Kromě této sjednocení nabízí ekosystém .NET 6:

  • Zjednodušený vývoj: Začít je snadné. Nové jazykové funkce v jazyce C# 10 snižují množství kódu, který potřebujete napsat. Investice do webového zásobníku a minimálních rozhraní API usnadňují rychlé psaní menších, rychlejších mikroslužeb.

  • Lepší výkon: .NET 6 je nejrychlejší kompletní webová platforma, která snižuje výpočetní náklady, pokud běžíte v cloudu.

  • ultimate productivity: .NET 6 a Visual Studio 2022 poskytují opětovné načítání za provozu, nové nástroje gitu, inteligentní úpravy kódu, robustní diagnostické a testovací nástroje a lepší týmovou spolupráci.

.NET 6 bude podporován jako verze s dlouhodobou podporou (LTS) po dobu tří let.

funkce ve verzi Preview jsou ve výchozím nastavení zakázané. Nepodporují se také pro použití v produkčním prostředí a můžou být odebrány v budoucí verzi. Nový RequiresPreviewFeaturesAttribute slouží k přidávání poznámek k rozhraním API ve verzi Preview a k upozornění odpovídajícího analyzátoru, pokud používáte tato rozhraní API ve verzi Preview.

Visual Studio 2022 a novější verze podporují .NET 6.

Tento článek se nezabývá všemi novými funkcemi .NET 6. Pokud chcete zobrazit všechny nové funkce a další informace o funkcích uvedených v tomto článku, podívejte se na příspěvek na blogu Oznámení .NET 6.

Výkon

.NET 6 zahrnuje řadu vylepšení výkonu. Tato část uvádí některá vylepšení – v FileStream, optimalizace s asistencí profilua kompilace AOT. Podrobné informace najdete v příspěvku na blogu o výkonových vylepšeních v .NET 6.

FileStream

Typ System.IO.FileStream byl přepsán pro .NET 6, aby poskytoval lepší výkon a spolehlivost ve Windows. Teď FileStream nikdy neblokuje při vytváření pro asynchronní vstupně-výstupní operace ve Windows. Další informace najdete v blogovém příspěvku o vylepšeních vstupně-výstupních operací souborů v .NET 6.

Optimalizace na základě profilu

Optimalizace s asistencí profilu (PGO) je místo, kde kompilátor JIT generuje optimalizovaný kód z hlediska typů a cest kódu, které se nejčastěji používají. .NET 6 zavádí dynamické PGO. Dynamické PGO spolupracuje s vrstvenou kompilací pro další optimalizaci kódu na základě dodatečné instrumentace, která je zavedena během úrovně 0. Dynamické PGO je ve výchozím nastavení zakázané, ale můžete ho povolit pomocí proměnné prostředí DOTNET_TieredPGO. Další informace najdete v tématu vylepšení výkonu JIT.

Crossgen2

.NET 6 zavádí Crossgen2, následník Crossgenu, který byl odstraněn. Crossgen a Crossgen2 jsou nástroje, které poskytují ahead-of-time (AOT) kompilaci, aby se zlepšil čas spuštění aplikace. Crossgen2 je napsaný v jazyce C# místo jazyka C++ a může provádět analýzu a optimalizaci, které nebyly možné s předchozí verzí. Další informace naleznete v tématu Konverzaci o Crossgen2.

Podpora Arm64

Verze .NET 6 zahrnuje podporu pro macOS Arm64 (nebo "Apple Silicon") a operační systémy Windows Arm64 pro nativní spouštění Arm64 i emulaci x64. Kromě toho instalační programy pro platformu x64 a Arm64 .NET teď instalují vedle sebe. Další informace najdete v tématu Podpora .NET pro macOS 11 a Windows 11 pro Arm64 a x64.

Opětovné načítání za provozu

Hot reload je funkce, která umožňuje upravovat zdrojový kód aplikace a okamžitě tyto změny použít na běžící aplikaci. Účelem této funkce je zvýšit produktivitu tím, že se vyhnete restartování aplikací mezi úpravami. Možnost hot reload je k dispozici v sadě Visual Studio 2022 a v nástroji příkazového řádku dotnet watch. Opětovné načítání v reálném čase funguje s většinou typů aplikací .NET a pro zdrojový kód jazyků C#, Visual Basic a C++. Pro více informací si přečtěte blogový příspěvek o rychlém opětovném načítání.

.NET MAUI

Uživatelské rozhraní multiplatformních aplikací .NET (.NET MAUI) je stále ve verzi Preview. Kandidát na vydání přichází v prvním čtvrtletí roku 2022 a všeobecná dostupnost (GA) ve druhém čtvrtletí roku 2022. .NET MAUI umožňuje vytvářet nativní klientské aplikace pro desktopové a mobilní operační systémy s jediným základem kódu. Další informace najdete v blogovém příspěvku Aktualizace na .NET multiplatformním uživatelském rozhraní.

C# 10 a šablony

C# 10 zahrnuje inovace, jako jsou direktivy global using, deklarace oboru názvů omezené na soubor a záznamové struktury. Další informace naleznete v části Historie verzí jazyka C#.

V rámci této práce byly šablony projektů .NET SDK pro jazyk C# modernizovány tak, aby používaly některé z nových jazykových funkcí:

  • metoda async Main
  • Příkazy nejvyšší úrovně
  • Nové výrazy typu cíle
  • implicitní direktivy global using
  • Prostor jmen pro soubory
  • Odkazové typy, které mohou mít hodnotu null

Přidáním těchto nových jazykových funkcí do šablon projektů začíná nový kód s povolenými funkcemi. Při upgradu na .NET 6 ale stávající kód nemá vliv. Další informace o těchto změnách šablon najdete v blogovém příspěvku .NET SDK: modernizované šablony projektů jazyka C#.

F# a Visual Basic

F# 6 přidává několik vylepšení jazyka F# a F# Interactive. Další informace najdete v části Novinky v jazyce F# 6.

Visual Basic má vylepšení v prostředí sady Visual Studio a při spuštění projektů Windows Forms.

Úlohy sady SDK

Aby byla velikost sady .NET SDK menší, byly některé komponenty umístěny do nových volitelných úloh sady SDK. Mezi tyto komponenty patří .NET MAUI a Blazor WebAssembly AOT. Pokud používáte Visual Studio, postará se o instalaci všech úloh sady SDK, které potřebujete. Pokud používáte rozhraní příkazového řádku .NET CLI , můžete spravovat úlohy pomocí nových příkazů dotnet workload:

Příkaz Popis
hledání úloh dotnet Vyhledá dostupné pracovní zátěže.
nainstalovat pracovní zatížení dotnet Nainstaluje zadanou úlohu.
dotnet workload uninstall Odebere zadanou zátěž.
aktualizace pracovních zátěží dotnet Aktualizuje nainstalované úlohy.
dotnet workload repair Přeinstaluje všechny nainstalované úlohy, aby se opravila poškozená instalace.
seznam pracovních zátěží dotnet Zobrazí seznam nainstalovaných úloh.

Další informace najdete v tématu volitelné úlohy sady SDK.

Rozhraní API System.Text.Json

V System.Text.Json v rozhraní .NET 6 bylo provedeno mnoho vylepšení, takže se jedná o serializační řešení „průmyslové kvality“.

Generátor zdrojů

.NET 6 přidá nový generátor zdrojů pro System.Text.Json. Generování zdrojového kódu funguje s JsonSerializer a dá se nakonfigurovat několika způsoby. Může zlepšit výkon, snížit využití paměti a usnadnit redukování sestavení. Další informace najdete v tématu Jak zvolit odraz nebo generování zdroje v System.Text.Json a Jak používat generování zdroje vSystem.Text.Json .

Zapisovatelný DOM

Byl přidán nový, zapisovatelný objektový model dokumentu (DOM), který doplňuje existující model MODELU DOM jen pro čtení. Nové rozhraní API poskytuje jednoduchou alternativu serializace pro případy, kdy použití prostých starých typů OBJEKTŮ CLR (POCO) není možné. Umožňuje také efektivně přecházet do podsložky velkého stromu JSON a číst pole nebo deserializovat POCO z této podsložky. Byly přidány následující nové typy pro podporu zapisovatelného modelu DOM:

Další informace najdete v tématu možnosti DOM JSON.

Serializace IAsyncEnumerable

System.Text.Json teď podporuje serializaci a deserializaci s instancemi IAsyncEnumerable<T>. Asynchronní metody serializace vyčíslí všechny IAsyncEnumerable<T> instance v grafu objektu a pak je serializují jako pole JSON. Pro deserializaci byla přidána nová metoda JsonSerializer.DeserializeAsyncEnumerable<TValue>(Stream, JsonSerializerOptions, CancellationToken). Další informace naleznete v IAsyncEnumerable serializace.

Další nová rozhraní API

Nová rozhraní serializace pro ověřování a výchozí hodnoty:

Další informace najdete v tématu zpětné volání.

Nový atribut řazení vlastností:

Nová metoda pro zápis "raw" JSON:

Synchronní serializace a deserializace do datového proudu:

Nová možnost ignorovat objekt při zjištění referenčního cyklu během serializace:

Další informace o serializaci a deserializaci pomocí System.Text.Json, naleznete v tématu JSON serializace a deserializace v .NET.

HTTP/3

.NET 6 zahrnuje podporu verze Preview pro HTTP/3, novou verzi HTTP. HTTP/3 řeší některé stávající problémy s funkčností a výkonem pomocí nového základního připojovacího protokolu s názvem QUIC. QuIC vytváří připojení rychleji a připojení jsou nezávislá na IP adrese, což umožňuje mobilním klientům roaming mezi Wi-Fi a mobilními sítěmi. Další informace jsou k dispozici v části Použití HTTP/3 s HttpClient.

ASP.NET Core

ASP.NET Core zahrnuje vylepšení minimálních rozhraní API, předběžnou kompilaci (AOT) pro aplikace Blazor WebAssembly a jednostránkové aplikace. Komponenty Blazor se teď dají vykreslit z JavaScriptu a integrovat se stávajícími aplikacemi založenými na JavaScriptu. Další informace najdete v tématu Novinky v ASP.NET Core 6.

OpenTelemetry

.NET 6 přináší vylepšenou podporu OpenTelemetry, což je kolekce nástrojů, rozhraní API a sad SDK, které pomáhají analyzovat výkon a chování softwaru. Rozhraní API v oboru názvů System.Diagnostics.Metrics implementují specifikaci rozhraní API OpenTelemetry Metrics. Existují například čtyři třídy instrumentace, které podporují různé scénáře metrik. Třídy instrumentace jsou:

Bezpečnost

.NET 6 přidává podporu verze Preview pro dvě klíčová zmírnění rizik zabezpečení: Technologie CET (Control-Flow Enforcement Technology) a "write exclusive execute" (W^X).

CET je technologie Intel dostupná v některých novějších procesorech Intel a AMD. Poskytuje hardwaru schopnosti chránit proti některým útokům na řízení toku řízení. .NET 6 poskytuje podporu CET pro aplikace pro Windows x64 a musíte ji explicitně povolit. Další informace najdete v tématu o kompatibilitě rozhraní .NET 6 se stínovými zásobníky Intel CET.

W^X je dostupný ve všech operačních systémech na .NET 6, ale ve výchozím nastavení je povolen pouze na Apple Silicon. W^X blokuje nejjednodušší cestu útoku tím, že zakáže zapisovatelné a spustitelné stránky paměti současně.

Ořezávání IL

Došlo k vylepšení zjednodušení samostatných nasazení. V .NET 5 došlo k oříznutí pouze nepoužívaných sestavení. .NET 6 také přidává odstranění nepoužívaných typů a členů. Kromě toho můžete oříznout upozornění, která vás upozorní na místa, kde oříznutí může odebrat kód, který se používá za běhu, jsou teď ve výchozím nastavení povolené. Další informace najdete v tématu Optimalizace samostatných nasazení a spustitelných souborů.

Analýza kódu

Sada .NET 6 SDK obsahuje několik nových analyzátorů kódu, které se týkají API kompatibility, kompatibility platforem, bezpečnosti při ořezávání, použití rozmezí v řetězení a rozdělování řetězců, rychlejších API pro práci s řetězci a rychlejších API pro kolekce. Úplný seznam nových (a odebraných) analyzátorů najdete v sekci Vydání analyzátorů – .NET 6.

Ochrana přizpůsobených platforem

Analyzátor kompatibility platformy rozpoznává Is<Platform> metody ve třídě OperatingSystem, například OperatingSystem.IsWindows(), jako ochrany platformy. Pro povolení ochrany vlastních platforem zavádí .NET 6 dva nové atributy, které můžete použít k přidávání poznámek k polím, vlastnostem nebo metodám s podporovaným nebo nepodporovaným názvem platformy:

Windows Forms

Application.SetDefaultFont(Font) je nová metoda v .NET 6, která nastavuje výchozí písmo v celé aplikaci.

Šablony pro aplikace Windows Forms v jazyce C# byly aktualizovány tak, aby podporovaly direktivy global using, obory názvů ohraničené souborem a odkazové typy s povolenou hodnotou null. Kromě toho zahrnují kód zavádění aplikace, který snižuje šablonový kód a umožňuje návrháři Windows Forms vykreslit návrhový povrch v preferovaném písmu. Bootstrap kód je volání ApplicationConfiguration.Initialize(), což je metoda generovaná zdrojem, která generuje volání jiných metod konfigurace, například Application.EnableVisualStyles(). Pokud navíc nastavíte jiné než výchozí písmo prostřednictvím vlastnosti ApplicationDefaultFont MSBuild, ApplicationConfiguration.Initialize() vygeneruje volání SetDefaultFont(Font).

Další informace najdete v blogovém příspěvku Co je nového ve Windows Forms.

Zdrojové sestavení

zdrojový tarball, který obsahuje veškeré zdrojové kódy pro sadu .NET SDK, je nyní výsledkem sestavení .NET SDK. Jiné organizace, jako je Red Hat, můžou pomocí tohoto zdrojového tarballu vytvořit vlastní verzi sady SDK.

Cílové monikery architektury

Pro .NET 6 byly přidány další monikery specifické pro operační systém (TFM), jako například net6.0-android, net6.0-iosa net6.0-macos. Další informace naleznete v tématu .NET 5+ OS-specifické TFMs.

Obecná matematika

V preview je možnost používat operátory u obecných typů v .NET 6. .NET 6 představuje řadu rozhraní, která využívají novou funkci preview jazyka C# 10, členy rozhraní static abstract. Tato rozhraní odpovídají různým operátorům, například IAdditionOperators představuje operátor +. Rozhraní jsou k dispozici v balíčku NuGet System.Runtime.Experimental. Pro více informací se podívejte na příspěvek o obecné matematice na blogu .

Ověření balíčku NuGet

Pokud jste vývojář knihovny NuGet, nové nástroje pro ověřování balíčků vám umožní ověřit, jestli jsou vaše balíčky konzistentní a správně vytvořené. Můžete určit, jestli:

  • Ve verzích balíčků došlo k nějakým zásadním změnám.
  • Balíček má stejnou sadu veřejných rozhraní API pro všechny implementace specifické pro modul runtime.
  • Existují nějaké mezery pro použitelnost cílové architektury nebo modulu runtime.

Další informace najdete v blogovém příspěvku o ověření balíčku .

Rozhraní API pro reflexi

.NET 6 zavádí následující nová rozhraní API, která kontrolují kód a poskytují informace o nullability:

Tato rozhraní API jsou užitečná pro nástroje založené na reflexi a serializátory.

Rozhraní API Microsoft.Extensions

Několik oborů názvů rozšíření má vylepšení v .NET 6, jak ukazuje následující tabulka.

Namespace Vylepšení
Microsoft.Extensions.DependencyInjection CreateAsyncScope umožňuje bezpečně používat příkaz using pro poskytovatele služeb, který zaregistruje službu IAsyncDisposable.
Microsoft.Extensions.Hosting Nové ConfigureHostOptions metody zjednodušují nastavení aplikace.
Microsoft.Extensions.Logging Microsoft.Extensions.Logging má nový generátor kódu pro efektivní logovací API. Pokud do metody protokolování partial přidáte nový LoggerMessageAttribute, aktivuje se generátor zdroje. V době kompilace generuje generátor implementaci metody partial, což je obvykle rychlejší za běhu než existující řešení protokolování. Další informace naleznete v tématu generování zdroje protokolování během kompilace.

Nová rozhraní LINQ API

V .NET 6 jsme přidali celou řadu metod LINQ. Většina nových metod uvedených v následující tabulce má ekvivalentní metody v System.Linq.Queryable typu.

Metoda Popis
Enumerable.TryGetNonEnumeratedCount<TSource>(IEnumerable<TSource>, Int32) Pokusí se určit počet prvků v sekvenci bez vynucení výčtu.
Enumerable.Chunk<TSource>(IEnumerable<TSource>, Int32) Rozdělí prvky sekvence na bloky zadané velikosti.
Enumerable.MaxBy a Enumerable.MinBy Najde maximální nebo minimální prvky pomocí selektoru klíčů.
Enumerable.DistinctBy, Enumerable.ExceptBy, Enumerable.IntersectBya Enumerable.UnionBy Tyto nové varianty metod, které provádějí operace založené na sadě, umožňují určit rovnost pomocí funkce selektoru klíče.
Enumerable.ElementAt<TSource>(IEnumerable<TSource>, Index) a Enumerable.ElementAtOrDefault<TSource>(IEnumerable<TSource>, Index) Přijímá indexy počítané od začátku nebo konce sekvence – například Enumerable.Range(1, 10).ElementAt(^2) vrátí 9.
Enumerable.FirstOrDefault<TSource>(IEnumerable<TSource>, TSource) a Enumerable.FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>, TSource)
Enumerable.LastOrDefault<TSource>(IEnumerable<TSource>, TSource) a Enumerable.LastOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>, TSource)
Enumerable.SingleOrDefault<TSource>(IEnumerable<TSource>, TSource) a Enumerable.SingleOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>, TSource)
Nová přetížení umožňují zadat výchozí hodnotu, která se má použít, pokud je sekvence prázdná.
Enumerable.Max<TSource>(IEnumerable<TSource>, IComparer<TSource>) a Enumerable.Min<TSource>(IEnumerable<TSource>, IComparer<TSource>) Nová přetížení umožňují určit komparátor.
Enumerable.Take<TSource>(IEnumerable<TSource>, Range) Přijímá argument Range, který zjednodušuje přebírání řezu sekvence– můžete například místo source.Take(7).Skip(2)použít source.Take(2..7) .
Enumerable.Zip<TFirst,TSecond,TThird>(IEnumerable<TFirst>, IEnumerable<TSecond>, IEnumerable<TThird>) Vytvoří sekvenci n-tic s prvky z tří zadaných sekvencí .

Vylepšení data, času a časového pásma

V rozhraní .NET 6 byly přidány následující dvě struktury: System.DateOnly a System.TimeOnly. Představují část data a časovou část DateTimev uvedeném pořadí. DateOnly je užitečná pro narozeniny a výročí a TimeOnly je užitečná pro denní alarmy a týdenní pracovní dobu.

Nyní můžete na libovolném operačním systému, který má nainstalována data časových pásem, použít buď ID časových pásem z Internet Assigned Numbers Authority (IANA), nebo z Windows. Metoda TimeZoneInfo.FindSystemTimeZoneById(String) byla aktualizována tak, aby automaticky převela svůj vstup z časového pásma Windows na časové pásmo IANA (nebo naopak), pokud požadované časové pásmo není v systému nalezeno. Kromě toho byly nové metody TryConvertIanaIdToWindowsId(String, String) a TryConvertWindowsIdToIanaId přidány pro scénáře, kdy stále potřebujete ručně převést z jednoho formátu časového pásma na jiný.

Existuje také několik dalších vylepšení časového pásma. Další informace najdete v tématu Vylepšení data, času a časového pásma v rozhraní .NET 6.

Třída PriorityQueue

Nová třída PriorityQueue<TElement,TPriority> představuje kolekci položek, které mají hodnotu i prioritu. Položky jsou vyřazovány v pořadí zvyšující se priority, tj. položka s nejnižší hodnotou priority je vyřazena jako první. Tato třída implementuje minimální haldu datové struktury.

Viz také