Co je nového 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čínáme 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ší úplná webová architektura zásobníku, která snižuje náklady na výpočetní prostředky, pokud běžíte v cloudu.

  • Konečná produktivita: .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áno po dobu tří let jako dlouhodobé verze podpory (LTS).

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. Novinka RequiresPreviewFeaturesAttribute se používá k přidávání poznámek k rozhraním API ve verzi Preview a odpovídající analyzátor vás upozorní, pokud tato rozhraní API ve verzi Preview používáte.

.NET 6 podporuje Visual Studio 2022 a Visual Studio 2022 pro Mac (a novější verze).

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 blogový příspěvek o oznámení .NET 6 .

Výkon

.NET 6 zahrnuje řadu vylepšení výkonu. Tato část uvádí některá vylepšení – v FileStreamu, optimalizaci s asistencí profilu a kompilaci AOT. Podrobné informace najdete v blogovém příspěvku .NET 6 o vylepšení výkonu.

Filestream

Typ System.IO.FileStream byl přepsán pro .NET 6, aby poskytoval lepší výkon a spolehlivost ve Windows. Nyní nikdy neblokujte FileStream při vytváření pro asynchronní vstupně-výstupní operace ve Windows. Další informace najdete v blogovém příspěvku o vstupně-výstupních operacích 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 funguje ručně s vrstvenou kompilací pro další optimalizaci kódu na základě další instrumentace, která je zavedená během vrstvy 0. Dynamické PGO je ve výchozím nastavení zakázané, ale můžete ho povolit s proměnnou DOTNET_TieredPGOprostředí. 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í kompilaci AOT (head-of-time), 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 najdete v tématu Konverzace 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

Opětovné načítání za provozu je funkce, která umožňuje upravit zdrojový kód aplikace a okamžitě tyto změny použít ve spuštěné aplikaci. Účelem této funkce je zvýšit produktivitu tím, že se vyhnete restartování aplikací mezi úpravami. Opětovné načítání za provozu je k dispozici v sadě Visual Studio 2022 a nástroji příkazového dotnet watch řádku. Opětovné načítání za provozu funguje s většinou typů aplikací .NET a pro zdrojový kód jazyka C#, Visual Basic a C++. Další informace najdete v blogovém příspěvku o opětovném načítání za provozu.

.NET MAUI

Uživatelské rozhraní multiplatformních aplikací .NET (.NET MAUI) je stále ve verzi Preview, přičemž kandidát verze přichází v prvním čtvrtletí roku 2022 a obecná dostupnost (GA) v 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 o aktualizaci více platforem uživatelského rozhraní aplikace .NET.

C# 10 a šablony

C# 10 zahrnuje inovace, jako global using jsou direktivy, deklarace oboru názvů v oboru souborů a struktury záznamů. Další informace najdete v tématu Co je nového v jazyce C# 10.

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í:

  • async Main Metoda
  • Příkazy nejvyšší úrovně
  • Nové výrazy typů určených podle cíle
  • Implicitní global using direktivy
  • Obory názvů v oboru souborů
  • Odkazové typy s možnou hodnotou 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 naleznete v sadě .NET SDK: Šablony projektů jazyka C# modernizované blogový příspěvek.

F# a Visual Basic

F# 6 přidává několik vylepšení jazyka F# a F# Interactive. Další informace najdete v tématu Co je nového v jazyce F# 6.

Visual Basic má vylepšení v prostředí sady Visual Studio a spuštění projektu model 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 .NET CLI, můžete spravovat úlohy pomocí nových dotnet workload příkazů:

Příkaz Popis
dotnet workload search Vyhledá dostupné úlohy.
dotnet workload install Nainstaluje zadanou úlohu.
dotnet workload uninstall Odebere zadanou úlohu.
dotnet workload update Aktualizace nainstalované úlohy.
dotnet workload repair Přeinstaluje všechny nainstalované úlohy, aby se opravila poškozená instalace.
dotnet workload list Zobrazí seznam nainstalovaných úloh.

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

Rozhraní API System.Text.Json

V rozhraní .NET 6 bylo provedeno System.Text.Json mnoho vylepšení, takže se jedná o "průmyslové síly" serializace řešení.

Generátor zdrojů

.NET 6 přidá nový generátor zdroje pro System.Text.Json. Generování zdrojového kódu funguje s JsonSerializer různými způsoby a dá se nakonfigurovat několika způsoby. Může zlepšit výkon, snížit využití paměti a usnadnit oříznutí sestavení. Další informace naleznete v tématu Jak zvolit reflexi nebo generování zdroje v souboru System.Text.Json a jak používat generování zdroje v souboru System.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 pododdílu velkého stromu JSON a číst pole nebo deserializovat POCO z této pododdílu. Byly přidány následující nové typy pro podporu zapisovatelného modelu DOM:

Další informace najdete v tématu Volby JSON DOM.

Serializace IAsyncEnumerable

System.Text.Json nyní podporuje serializaci a deserializaci s IAsyncEnumerable<T> instancemi. 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 tématu 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í.

Atribut řazení nových 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.Jsonjson 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 naleznete v tématu Použití HTTP/3 s HttpClient.

ASP.NET Core

ASP.NET Core zahrnuje vylepšení minimálních rozhraní API, kompilace AOT (Head-of-Time) pro aplikace Blazor WebAssembly a jednostrákové 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 Co je nového v ASP.NET Core 6.

OpenTelemetry

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

Zabezpečení

.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. Přidává do hardwaru možnosti, které chrání před útoky na řízení a toky. .NET 6 poskytuje podporu CET pro aplikace pro Windows x64 a musíte ji explicitně povolit. Další informace najdete v tématu Kompatibilita rozhraní .NET 6 se zásobníky stínových zásobníků Intel CET.

W^X je k dispozici všechny operační systémy s .NET 6, ale ve výchozím nastavení je povoleno 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

Vylepšili jsme oříznutí samostatných nasazení. V .NET 5 byly oříznuty pouze nepoužívané sestavení. .NET 6 také přidává oříznutí 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 Oříznutí 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í kompatibility rozhraní API, kompatibility platforem, zabezpečení oříznutí, použití rozsahu v řetězení řetězců a rozdělení, rychlejší rozhraní API řetězců a rychlejší rozhraní API kolekce. Úplný seznam nových (a odebraných) analyzátorů najdete v tématu Verze analyzátoru – .NET 6.

Ochrana vlastních platforem

Analyzátor kompatibility Is<Platform> platformy rozpozná metody ve OperatingSystem třídě, OperatingSystem.IsWindows()například , jako stráže 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á nastaví výchozí písmo v rámci vaší aplikace.

Šablony pro aplikace model Windows Forms jazyka C# byly aktualizovány tak, aby podporovaly global using direktivy, obory názvů v oboru souborů a odkazové typy s možnou hodnotou null. Kromě toho zahrnují kód bootstrap aplikace, který snižuje často používaný kód a umožňuje návrháři model Windows Forms vykreslit návrhovou plochu v upřednostňované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(). Kromě toho, pokud nastavíte non-výchozí písmo prostřednictvím ApplicationDefaultFont MSBuild vlastnost, ApplicationConfiguration.Initialize() vygeneruje volání SetDefaultFont(Font).

Další informace najdete v blogovém příspěvku o novinkách v model Windows Forms.

Zdrojové sestavení

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

Monikers cílové architektury

Pro .NET 6 byly přidány další monikery cílové architektury specifické pro operační systém (TFMs), například net6.0-android, , net6.0-iosa net6.0-macos. Další informace najdete v sadě TFM specifické pro .NET 5 nebo novější.

Obecná matematika

Ve verzi 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, static abstract členy rozhraní. Tato rozhraní odpovídají různým operátorům, IAdditionOperators například představuje + operátor. Rozhraní jsou k dispozici v balíčku System.Runtime.Experimental NuGet. Další informace najdete v blogovém příspěvku obecné matematiky .

Ověření balíčku NuGet

Pokud jste vývojář knihovny NuGet, nové nástroje pro ověřování balíčků umožňují 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 Reflexe

.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.

Obor názvů Vylepšení
Microsoft.Extensions.DependencyInjection CreateAsyncScope umožňuje bezpečně používat using příkaz pro poskytovatele služeb, který službu zaregistruje IAsyncDisposable .
Microsoft.Extensions.Hosting Nové ConfigureHostOptions metody zjednodušují nastavení aplikace.
Microsoft.Extensions.Logging Microsoft.Extensions.Logging má nový generátor zdrojů pro výkonná rozhraní API protokolování. Pokud do metody protokolování přidáte novou LoggerMessageAttribute metodu partial protokolování, aktivuje se generátor zdroje. V době kompilace generátor generuje implementaci partial metody, 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í v době 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 obsahuje 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 porovnávací nástroj.
Enumerable.Take<TSource>(IEnumerable<TSource>, Range) Range Přijímá argument pro zjednodušení pořizování řezu sekvence, například místo source.Take(2..7)source.Take(7).Skip(2).
Enumerable.Zip<TFirst,TSecond,TThird>(IEnumerable<TFirst>, IEnumerable<TSecond>, IEnumerable<TThird>) Vytvoří sekvenci řazených kolekcí členů s prvky ze tří zadaných sekvencí.

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

V .NET 6 byly přidány následující dvě struktury: System.DateOnly a System.TimeOnly. Představují část data a časovou DateTimečást , v 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.

Teď můžete v libovolném operačním systému s nainstalovanými daty časových pásem IANA (Internet Assigned Numbers Authority) nebo ID časových pásem Windows použít. Metoda TimeZoneInfo.FindSystemTimeZoneById(String) byla aktualizována tak, aby automaticky převáděla svůj vstup z časového pásma Windows na časové pásmo IANA (nebo naopak), pokud požadované časové pásmo v systému nenajde. Kromě toho byly přidány nové metody TryConvertIanaIdToWindowsId(String, String) a TryConvertWindowsIdToIanaId byly 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 .NET 6.

PriorityQueue – třída

Nová PriorityQueue<TElement,TPriority> třída představuje kolekci položek, které mají hodnotu i prioritu. Položky se stáhnou v pořadí priority, tj. položka s nejnižší hodnotou priority se nejprve vyřadit z fronty. Tato třída implementuje minimální datovou strukturu haldy .

Viz také