Udostępnij za pośrednictwem


Co nowego na platformie .NET 6

Platforma .NET 6 dostarcza końcowe części planu zjednoczenia platformy .NET, które rozpoczęły się od platformy .NET 5. Platforma .NET 6 łączy zestaw SDK, biblioteki podstawowe i środowisko uruchomieniowe w aplikacjach mobilnych, klasycznych, IoT i w chmurze. Oprócz tego zjednoczenia ekosystem .NET 6 oferuje:

  • uproszczone programowanie: wprowadzenie jest łatwe. Nowe funkcje językowe w C# 10 zmniejszają ilość kodu, który musisz napisać. Inwestycje w stos internetowy i minimalne interfejsy API ułatwiają szybkie zapisywanie mniejszych, szybszych mikrousług.

  • Lepszą wydajność: platforma .NET 6 jest najszybszą platformą internetową pełnego stosu, która obniża koszty obliczeń, jeśli korzystasz z chmury.

  • Ultimate productivity: .NET 6 i Visual Studio 2022 zapewniają gorące przeładowanie, nowe narzędzia Git, inteligentną edycję kodu, niezawodne narzędzia diagnostyczne i testowe oraz lepszą współpracę zespołową.

Platforma .NET 6 będzie obsługiwana przez trzy lata, jako wersja długoterminowa (LTS).

Funkcje wersji zapoznawczej są domyślnie wyłączone. Nie są one również obsługiwane do użytku w środowisku produkcyjnym i mogą zostać usunięte w przyszłej wersji. Nowy RequiresPreviewFeaturesAttribute służy do dodawania adnotacji do interfejsów API w wersji zapoznawczej, a analizator powiadamia Cię, jeśli używasz tych interfejsów API.

Platforma .NET 6 jest obsługiwana przez program Visual Studio 2022 i nowsze wersje.

Ten artykuł nie obejmuje wszystkich nowych funkcji platformy .NET 6. Aby wyświetlić wszystkie nowe funkcje i uzyskać więcej informacji na temat funkcji wymienionych w tym artykule, zobacz wpis w blogu Ogłaszanie platformy .NET 6.

Wydajność

Platforma .NET 6 zawiera wiele ulepszeń wydajności. W tej sekcji wymieniono niektóre ulepszenia — w FileStream, optymalizacji z przewodnikiem profilu, oraz kompilacji AOT. Aby uzyskać szczegółowe informacje, zobacz wpis w blogu Performance improvements in .NET 6 (Ulepszenia wydajności platformy .NET 6).

FileStream

Typ System.IO.FileStream został przepisany dla platformy .NET 6, aby zapewnić lepszą wydajność i niezawodność w systemie Windows. Teraz FileStream nigdy się nie blokuje, gdy jest tworzony do asynchronicznych operacji wejścia/wyjścia w systemie Windows. Aby uzyskać więcej informacji, zobacz wpis na blogu dotyczący ulepszeń we/wy plików w .NET 6.

Optymalizacja sterowana profilem

Optymalizacja sterowana profilem (PGO) to miejsce, w którym kompilator JIT generuje zoptymalizowany kod pod względem typów i ścieżek kodu, które są najczęściej używane. Platforma .NET 6 wprowadza dynamiczne PGO. Dynamiczne PGO działa w parze z kompilacją warstwową w celu dalszej optymalizacji kodu na podstawie dodatkowej instrumentacji wprowadzonej podczas etapu 0. Dynamiczne PGO jest domyślnie wyłączone, ale można ją włączyć za pomocą zmiennej środowiskowej DOTNET_TieredPGO. Aby uzyskać więcej informacji, zobacz ulepszenia wydajności JIT.

Crossgen2

.NET 6 wprowadza Crossgen2, następcę Crossgengen, który został usunięty. Crossgen i Crossgen2 to narzędzia, które zapewniają kompilację przed czasem (AOT), aby poprawić czas uruchamiania aplikacji. Crossgen2 jest napisany w języku C# zamiast C++, i może wykonywać analizę oraz optymalizację, które nie były możliwe w poprzedniej wersji. Aby uzyskać więcej informacji, zobacz Conversation about Crossgen2.

Obsługa arm64

Wersja .NET 6 obejmuje obsługę systemów operacyjnych macOS Arm64 (lub "Apple Silicon") oraz Windows Arm64, zarówno dla natywnego wykonywania arm64, jak i emulacji x64. Ponadto instalatory platformy .NET x64 i Arm64 są teraz instalowane obok siebie. Aby uzyskać więcej informacji, zobacz .NET Wsparcie dla macOS 11 i Windows 11 dla Arm64 i x64.

Przeładowywanie na gorąco

Przeładowywanie na gorąco to funkcja, która umożliwia modyfikowanie kodu źródłowego aplikacji i natychmiastowe stosowanie tych zmian do uruchomionej aplikacji. Celem tej funkcji jest zwiększenie produktywności dzięki unikaniu ponownego uruchamiania aplikacji między edycjami. Ponowne ładowanie na gorąco jest dostępne w programie Visual Studio 2022 i narzędziu wiersza polecenia dotnet watch. Przeładowywanie na gorąco działa z większością typów aplikacji platformy .NET oraz w kodzie źródłowym C#, Visual Basic i C++. Aby uzyskać więcej informacji, zobacz wpis na blogu Hot reload.

.NET MAUI

Interfejs użytkownika aplikacji wieloplatformowej platformy .NET (.NET MAUI) jest nadal dostępny w wersji zapoznawczej, z kandydatem do wydania dostępnym w pierwszym kwartale 2022 r. i ogólnie dostępnej (GA) w drugim kwartale 2022 r. Program .NET MAUI umożliwia tworzenie natywnych aplikacji klienckich dla systemów operacyjnych klasycznych i mobilnych z pojedynczą bazą kodu. Aby uzyskać więcej informacji, zobacz wpis Update on .NET Multi-platform App UI na blogu.

C# 10 i szablony

Język C# 10 zawiera innowacje, takie jak dyrektywy global using, deklaracje przestrzeni nazw o zakresie plików i struktury rekordów. Aby uzyskać więcej informacji, zobacz historię wersji języka C#.

W ramach tej pracy szablony projektów zestawu .NET SDK dla języka C# zostały zmodernizowane w celu korzystania z niektórych nowych funkcji językowych:

  • async Main metoda
  • Instrukcje najwyższego poziomu
  • Nowe wyrażenia typu docelowego
  • niejawne dyrektywy global using
  • Przestrzenie nazw o zakresie plików
  • Typy referencyjne obsługujące wartości null

Dodając te nowe funkcje językowe do szablonów projektów, nowy kod zaczyna się od funkcji włączonych. Jednak istniejący kod nie ma wpływu na uaktualnienie do platformy .NET 6. Aby uzyskać więcej informacji na temat tych zmian szablonów, zobacz wpis na blogu .NET SDK: szablony projektów języka C# zmodernizowane.

F# i Visual Basic

F# 6 wprowadza kilka ulepszeń do języka F# i F# Interactive. Aby uzyskać więcej informacji, zobacz Co nowego w języku F# 6.

Visual Basic ma ulepszenia w doświadczeniu użytkownika w Visual Studio oraz podczas uruchamiania projektów Windows Forms.

Obciążenia zestawu SDK

Aby zmniejszyć rozmiar zestawu .NET SDK, niektóre składniki zostały umieszczone w nowych, opcjonalnych obciążeniach zestawu SDK . Składniki te obejmują .NET MAUI oraz Blazor WebAssembly AOT. Jeśli używasz programu Visual Studio, zajmie się instalowaniem dowolnych potrzebnych obciążeń zestawu SDK. Jeśli używasz konsoli .NET, możesz zarządzać aplikacjami za pomocą nowych poleceń dotnet workload:

Polecenie Opis
wyszukiwania obciążeń dotnet Wyszukuje dostępne zadania robocze.
instalacji obciążenia dotnet Instaluje określony zestaw zadań.
odinstalowywanie obciążenia dotnet Usuwa określone obciążenie.
aktualizacja pakietów roboczych dotnet Aktualizacje zainstalowanych obciążeń.
naprawa pakietów roboczych dotnet Ponownie instaluje wszystkie zainstalowane obciążenia, aby naprawić uszkodzoną instalację.
lista obciążeń dotnet Wyświetla listę zainstalowanych obciążeń.

Aby uzyskać więcej informacji, zobacz opcjonalne obciążenia zestawu SDK.

Interfejsy API System.Text.Json

W platformie .NET 6 wprowadzono wiele ulepszeń w System.Text.Json, dzięki czemu jest to teraz rozwiązanie serializacji o standardzie przemysłowym.

Generator źródłowy

Platforma .NET 6 wprowadza nowy generator kodu źródłowego dla System.Text.Json. Generowanie źródła współpracuje z JsonSerializer i można je skonfigurować na wiele sposobów. Może zwiększyć wydajność, zmniejszyć użycie pamięci i ułatwić przycinanie zestawów oprogramowania. Aby uzyskać więcej informacji, zobacz Jak wybrać refleksję lub generację źródłową w System.Text.Json oraz Jak używać generacji źródłowej w System.Text.Json.

Zapisywalny DOM

Dodano nowy, zapisywalny model obiektu dokumentu (DOM), który uzupełnia istniejący DOM dostępny tylko do odczytu. Nowy interfejs API oferuje alternatywę uproszczonej serializacji dla sytuacji, gdy użycie zwykłych obiektów CLR (POCO) jest niemożliwe. Umożliwia to również efektywne przechodzenie do podsekcji dużego drzewa JSON i odczytywanie tablicy lub zdeserializowanie obiektu POCO z tej podsekcji. Dodano następujące nowe typy do obsługi zapisywalnego modelu DOM:

Aby uzyskać więcej informacji, zobacz opcje DOM w formacie JSON.

Serializacja IAsyncEnumerable

System.Text.Json obsługuje teraz serializację i deserializację przy użyciu wystąpień IAsyncEnumerable<T>. Asynchroniczne metody serializacji wyliczają wszystkie wystąpienia IAsyncEnumerable<T> na grafie obiektu, a następnie serializują je jako tablice JSON. W przypadku deserializacji dodano nową metodę JsonSerializer.DeserializeAsyncEnumerable<TValue>(Stream, JsonSerializerOptions, CancellationToken). Aby uzyskać więcej informacji, zobacz IAsyncEnumerable serialization.

Inne nowe interfejsy API

Nowe interfejsy serializacji na potrzeby walidacji i wartości domyślnych:

Aby uzyskać więcej informacji, zobacz Wywołania zwrotne.

Nowy atrybut porządkowania właściwości:

Nowa metoda zapisu "raw" JSON:

Synchroniczna serializacja i deserializacja do strumienia.

Nowa opcja ignorowania obiektu w przypadku wykrycia cyklu odwołania podczas serializacji:

Aby uzyskać więcej informacji dotyczących serializacji i deserializacji za pomocą System.Text.Json, zobacz JSON serializację i deserializację na platformie .NET.

HTTP/3

Platforma .NET 6 obejmuje obsługę wersji zapoznawczej protokołu HTTP/3, nowej wersji protokołu HTTP. Protokół HTTP/3 rozwiązuje niektóre istniejące wyzwania związane z funkcjonalnością i wydajnością przy użyciu nowego podstawowego protokołu połączenia o nazwie QUIC. QuiC ustanawia połączenia szybciej, a połączenia są niezależne od adresu IP, dzięki czemu klienci mobilni mogą wędrować między sieciami Wi-Fi i komórkowymi. Aby uzyskać więcej informacji, zobacz Use HTTP/3 with HttpClient.

ASP.NET Core

ASP.NET Core zawiera ulepszenia w minimalnych API, kompilację ahead-of-time (AOT) dla aplikacji Blazor WebAssembly i aplikacji jednostronicowych. Ponadto komponenty Blazor można teraz renderować z poziomu języka JavaScript i zintegrować z istniejącymi aplikacjami opartymi na JavaScript. Aby uzyskać więcej informacji, zobacz Co nowego w programie ASP.NET Core 6.

OpenTelemetry

Platforma .NET 6 oferuje ulepszoną obsługę openTelemetry, która jest kolekcją narzędzi, interfejsów API i zestawów SDK, które ułatwiają analizowanie wydajności i zachowania oprogramowania. API w przestrzeni nazw System.Diagnostics.Metrics implementują specyfikację API metryk OpenTelemetry . Istnieją na przykład cztery klasy instrumentów do obsługi różnych scenariuszy metryk. Klasy instrumentów to:

Bezpieczeństwo

Platforma .NET 6 dodaje obsługę wersji zapoznawczej dla dwóch kluczowych środków zaradczych zabezpieczeń: Control-flow Enforcement Technology (CET) i "write exclusive execute" (W^X).

CET to technologia Intel dostępna w nowszych procesorach Intel i AMD. Dodaje możliwości sprzętowe, które chronią przed atakami przechwytywania przepływu sterowania. Platforma .NET 6 zapewnia obsługę cet dla aplikacji systemu Windows x64 i musisz jawnie ją włączyć. Aby uzyskać więcej informacji, zobacz zgodność .NET 6 ze stosami cieni Intel CET.

Program W^X jest dostępny we wszystkich systemach operacyjnych z platformą .NET 6, ale domyślnie włączony tylko w systemie Apple Silicon. Program W^X blokuje najprostszą ścieżkę ataku, uniemożliwiając jednoczesne zapisywanie i wykonywanie stron pamięci.

Przycinanie IL

Ulepszono optymalizację wdrożeń samodzielnych. Na platformie .NET 5 tylko nieużywane zestawy zostały przycięte. Platforma .NET 6 dodaje również przycinanie nieużywanych typów i elementów członkowskich. Ponadto ostrzeżenia dotyczące przycinania, które ostrzegają o miejscach, w których przycinanie może usunąć kod używany w czasie wykonywania, są teraz włączone domyślnie. Aby uzyskać więcej informacji, zobacz Trim samodzielne wdrożenia i pliki wykonywalne.

Analiza kodu

Zestaw .NET 6 SDK zawiera kilka nowych analizatorów kodu, które dotyczą zgodności interfejsów API, zgodności platformy, bezpieczeństwa w kontekście przycinania, używania typów span w łączeniu i dzieleniu ciągów, przyspieszających interfejsów API dla ciągów i przyspieszających interfejsów API dla kolekcji. Aby uzyskać pełną listę nowych (i usuniętych) analizatorów, zobacz Analyzer releases — .NET 6.

Niestandardowe osłony platform

Analizator zgodności platformy rozpoznaje metody Is<Platform> w klasie OperatingSystem, na przykład OperatingSystem.IsWindows(), jako strażniki platformy. Aby umożliwić niestandardowe mechanizmy ochrony platformy, .NET 6 wprowadza dwa nowe atrybuty, których można użyć do oznakowania pól, właściwości lub metod nazwą platformy obsługiwanej lub nieobsługiwanej.

Formularze systemu Windows

Application.SetDefaultFont(Font) to nowa metoda na platformie .NET 6, która ustawia domyślną czcionkę w aplikacji.

Szablony aplikacji Windows Forms w języku C# zostały zaktualizowane, aby obsługiwać dyrektywy global using, przestrzenie nazw o zakresie pliku oraz typy odwołań dopuszczające wartości null. Ponadto obejmują one kod bootstrap aplikacji, co zmniejsza kod szablonowy i umożliwia projektantowi Windows Forms renderowanie powierzchni projektowej w preferowanej czcionce. Kod bootstrap to wywołanie metody ApplicationConfiguration.Initialize(), która jest metodą wygenerowaną przez źródło, która emituje wywołania do innych metod konfiguracji, takich jak Application.EnableVisualStyles(). Ponadto jeśli ustawisz czcionkę inną niż domyślną za pomocą właściwości ApplicationDefaultFont MSBuild, ApplicationConfiguration.Initialize() emituje wywołanie SetDefaultFont(Font).

Aby uzyskać więcej informacji, zobacz wpis w blogu Co nowego w usłudze Windows Forms.

Kompilacja źródłowa

Archiwum źródłowe tarball, które zawiera całe źródło dla zestawu .NET SDK, jest teraz produktem kompilacji zestawu .NET SDK. Inne organizacje, takie jak Red Hat, mogą tworzyć własną wersję zestawu SDK przy użyciu tego źródłowego tarballa.

Monikers platformy docelowej

Dodano dodatkowe monikery frameworku docelowego specyficzne dla systemów operacyjnych (TFMs) dla .NET 6, na przykład net6.0-android, net6.0-iosi net6.0-macos. Aby uzyskać więcej informacji, zobacz OS-specyficzne TFM-y .NET 5+.

Ogólna matematyka

W wersji zapoznawczej dostępna jest możliwość używania operatorów na typach ogólnych w .NET 6. Platforma .NET 6 wprowadza wiele interfejsów, które korzystają z nowej funkcji języka C# 10 w wersji zapoznawczej, członków interfejsu static abstract. Te interfejsy odpowiadają różnym operatorom, na przykład IAdditionOperators reprezentuje operator +. Interfejsy są dostępne w pakiecie NuGet System.Runtime.Experimental. Aby uzyskać więcej informacji, zobacz wpis w blogu Generic math.

Walidacja pakietu NuGet

Jeśli jesteś deweloperem biblioteki NuGet, nowe narzędzia weryfikacji pakietów umożliwiają sprawdzenie, czy pakiety są spójne i dobrze sformułowane. Możesz określić, czy:

  • Istnieją zmiany powodujące niezgodność we wszystkich wersjach pakietu.
  • Pakiet ma ten sam zestaw publicznych interfejsów API dla wszystkich implementacji specyficznych dla środowiska uruchomieniowego.
  • Istnieją luki w zastosowaniu platformy docelowej lub środowiska uruchomieniowego.

Aby uzyskać więcej informacji, zobacz post na blogu walidacji pakietu.

Interfejsy Programowania Aplikacji Refleksji

Platforma .NET 6 wprowadza następujące nowe interfejsy API, które sprawdzają kod i zapewniają informacje o anulowalności.

Te interfejsy API są przydatne w przypadku narzędzi opartych na odbiciu i serializatorów.

Microsoft.Extensions API

Kilka rozszerzeń przestrzeni nazw ma ulepszenia na platformie .NET 6, jak pokazano w poniższej tabeli.

Namespace Ulepszenia
Microsoft.Extensions.DependencyInjection CreateAsyncScope umożliwia bezpieczne używanie instrukcji using dla dostawcy usług, który rejestruje usługę IAsyncDisposable.
Microsoft.Extensions.Hosting Nowe metody ConfigureHostOptions upraszczają konfigurowanie aplikacji.
Microsoft.Extensions.Logging Microsoft.Extensions.Logging ma nowy generator kodu źródłowego dla wydajnych interfejsów API do rejestrowania dzienników. Generator źródłowy jest wyzwalany, jeśli dodasz nowy LoggerMessageAttribute do metody logowania partial. W czasie kompilacji generator generuje implementację metody partial, która jest zwykle szybsza w czasie wykonywania niż istniejące rozwiązania rejestrowania. Aby uzyskać więcej informacji, zobacz Generowanie źródła rejestrowania w czasie kompilacji.

Nowe interfejsy API LINQ

W programie .NET 6 dodano wiele metod LINQ. Większość nowych metod wymienionych w poniższej tabeli ma równoważne metody w typie System.Linq.Queryable.

Metoda Opis
Enumerable.TryGetNonEnumeratedCount<TSource>(IEnumerable<TSource>, Int32) Próbuje określić liczbę elementów w sekwencji bez wymuszania wyliczenia.
Enumerable.Chunk<TSource>(IEnumerable<TSource>, Int32) Dzieli elementy sekwencji na fragmenty określonego rozmiaru.
Enumerable.MaxBy i Enumerable.MinBy Znajduje elementy maksymalne lub minimalne przy użyciu selektora kluczy.
Enumerable.DistinctBy, Enumerable.ExceptBy, Enumerable.IntersectByi Enumerable.UnionBy Te nowe odmiany metod, które wykonują operacje oparte na zestawie, umożliwiają określenie równości przy użyciu funkcji selektora kluczy.
Enumerable.ElementAt<TSource>(IEnumerable<TSource>, Index) i Enumerable.ElementAtOrDefault<TSource>(IEnumerable<TSource>, Index) Akceptuje indeksy zliczane od początku lub końca sekwencji — na przykład Enumerable.Range(1, 10).ElementAt(^2) zwraca wartość 9.
Enumerable.FirstOrDefault<TSource>(IEnumerable<TSource>, TSource) i Enumerable.FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>, TSource)
Enumerable.LastOrDefault<TSource>(IEnumerable<TSource>, TSource) i Enumerable.LastOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>, TSource)
Enumerable.SingleOrDefault<TSource>(IEnumerable<TSource>, TSource) i Enumerable.SingleOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>, TSource)
Nowe przeciążenia umożliwiają określenie wartości domyślnej do użycia, jeśli sekwencja jest pusta.
Enumerable.Max<TSource>(IEnumerable<TSource>, IComparer<TSource>) i Enumerable.Min<TSource>(IEnumerable<TSource>, IComparer<TSource>) Nowe przeciążenia umożliwiają określenie komparatora.
Enumerable.Take<TSource>(IEnumerable<TSource>, Range) Akceptuje argument Range, aby uprościć wykonywanie fragmentu sekwencji — na przykład można użyć source.Take(2..7) zamiast source.Take(7).Skip(2).
Enumerable.Zip<TFirst,TSecond,TThird>(IEnumerable<TFirst>, IEnumerable<TSecond>, IEnumerable<TThird>) Tworzy sekwencję krotek z elementami z trzech określonych sekwencji .

Ulepszenia daty, godziny i strefy czasowej

W programie .NET 6 dodano następujące dwie struktury: System.DateOnly i System.TimeOnly. Reprezentują one odpowiednio część daty i część godziny DateTime. DateOnly jest przydatna w przypadku urodzin i rocznic, a TimeOnly jest przydatna w przypadku codziennych alarmów i tygodniowych godzin pracy.

Teraz możesz użyć identyfikatorów IANA (Internet Assigned Numbers Authority) lub Identyfikatorów stref czasowych systemu Windows w dowolnym systemie operacyjnym, który ma zainstalowane dane strefy czasowej. Metoda TimeZoneInfo.FindSystemTimeZoneById(String) została zaktualizowana w celu automatycznego przekonwertowania danych wejściowych ze strefy czasowej systemu Windows na strefę czasową IANA (lub odwrotnie), jeśli żądana strefa czasowa nie zostanie znaleziona w systemie. Ponadto nowe metody TryConvertIanaIdToWindowsId(String, String) i TryConvertWindowsIdToIanaId zostały dodane w scenariuszach, gdy nadal trzeba ręcznie przekonwertować z jednego formatu strefy czasowej na inny.

Istnieje również kilka innych ulepszeń strefy czasowej. Aby uzyskać więcej informacji, zapoznaj się z Ulepszenia daty, godziny i strefy czasowej na platformie .NET 6.

Klasa PriorityQueue

Nowa klasa PriorityQueue<TElement,TPriority> reprezentuje kolekcję elementów, które mają zarówno wartość, jak i priorytet. Elementy są zdejmowane z kolejki w miarę wzrastania priorytetu, czyli element o najniższej priorytetowej wartości jest zdejmowany jako pierwszy. Ta klasa implementuje kopiec minimalny struktury danych.

Zobacz też