Nowości 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 języku C# 10 zmniejszają ilość kodu potrzebnego do pisania. Inwestycje w stos internetowy i minimalne interfejsy API ułatwiają szybkie zapisywanie mniejszych, szybszych mikrousług.

  • Lepsza wydajność: platforma .NET 6 to najszybsza platforma internetowa pełnego stosu, która obniża koszty obliczeń, jeśli korzystasz z chmury.

  • Ostateczna produktywność: programy .NET 6 i Visual Studio 2022 zapewniają gorące ponowne ładowanie, nowe narzędzia git, inteligentne edytowanie kodu, niezawodną diagnostykę i narzędzia do testowania oraz lepszą współpracę zespołową.

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

Funkcje w 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 jest używany do dodawania adnotacji do interfejsów API w wersji zapoznawczej oraz odpowiedniego analizatora alertów, jeśli używasz tych interfejsów API w wersji zapoznawczej.

Platforma .NET 6 jest obsługiwana przez programy Visual Studio 2022 i Visual Studio 2022 dla komputerów Mac (i nowsze wersje).

Ten artykuł nie obejmuje wszystkich nowych funkcji platformy .NET 6. Aby zapoznać się ze wszystkimi nowymi funkcjami 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 pliku FileStream, optymalizacji sterowanej profilem i kompilacji AOT. Aby uzyskać szczegółowe informacje, zobacz wpis w blogu Ulepszenia wydajności na platformie .NET 6 .

Filestream

Typ System.IO.FileStream został przepisany dla platformy .NET 6, aby zapewnić lepszą wydajność i niezawodność w systemie Windows. FileStream Teraz nigdy nie blokuje tworzenia dla asynchronicznych operacji we/wy w systemie Windows. Aby uzyskać więcej informacji, zobacz wpis w blogu Ulepszenia operacji we/wy plików na platformie .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 dynamiczny punkt PGO. Dynamiczne rozwiązanie PGO działa ręcznie z kompilacją warstwową w celu dalszej optymalizacji kodu na podstawie dodatkowej instrumentacji wprowadzonej w warstwie 0. Dynamiczne PGO jest domyślnie wyłączone, ale można ją włączyć za pomocą zmiennej środowiskowejDOTNET_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. Język Crossgen2 jest napisany w języku C# zamiast języka C++i może wykonywać analizę i optymalizację, które nie były możliwe w poprzedniej wersji. Aby uzyskać więcej informacji, zobacz Konwersacja dotycząca crossgen2.

Obsługa arm64

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

Gorące ponowne ładowanie

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. Przeładowywanie na gorąco jest dostępne w programie Visual Studio 2022 i narzędziu dotnet watch wiersza polecenia. 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 w blogu Hot reload (Przeładowywanie na gorąco).

.NET MAUI

Interfejs użytkownika aplikacji wieloplatformowej platformy .NET (.NET MAUI) jest nadal w wersji zapoznawczej, a kandydat do wydania będzie dostępny 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 w blogu Aktualizowanie interfejsu użytkownika aplikacji wieloplatformowej platformy .NET.

C# 10 i szablony

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

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 z typem docelowym
  • Niejawne global using dyrektywy
  • Przestrzenie nazw o zakresie plików
  • Typy referencyjne dopuszczające wartość 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 w blogu .NET SDK: szablony projektów języka C#.

F# i Visual Basic

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

Program Visual Basic ma ulepszenia środowiska programu Visual Studio i uruchamiania projektu Windows Forms.

Obciążenia zestawu SDK

Aby zachować mniejszy rozmiar zestawu .NET SDK, niektóre składniki zostały umieszczone w nowych, opcjonalnych obciążeniach zestawu SDK. Składniki te obejmują platformę .NET MAUI i zestaw WebAssembly AOT platformy Blazor. Jeśli używasz programu Visual Studio, zajmie się instalowaniem dowolnych potrzebnych obciążeń zestawu SDK. Jeśli używasz interfejsu wiersza polecenia platformy .NET, możesz zarządzać obciążeniami przy użyciu nowych dotnet workload poleceń:

Polecenie opis
wyszukiwanie obciążeń dotnet Wyszukuje dostępne obciążenia.
dotnet workload install (instalacja obciążenia dotnet) Instaluje określone obciążenie.
odinstalowywanie obciążenia dotnet Usuwa określone obciążenie.
dotnet workload update Aktualizacje zainstalowanych obciążeń.
dotnet workload repair (naprawa obciążenia dotnet) Ponownie instaluje wszystkie zainstalowane obciążenia, aby naprawić uszkodzoną instalację.
dotnet workload list Wyświetla listę zainstalowanych obciążeń.

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

Interfejsy API System.Text.Json

W programie .NET 6 wprowadzono System.Text.Json wiele ulepszeń, dzięki czemu jest to teraz rozwiązanie serializacji "siła przemysłowa".

Generator źródła

Platforma .NET 6 dodaje nowy generator źródeł dla programu System.Text.Json. Generowanie źródła działa z elementem 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. Aby uzyskać więcej informacji, zobacz How to choose reflection or source generation in System.Text.Json and How to use source generation in System.Text.Json (Jak używać generowania źródła w pliku System.Text.Json).

Zapisywalny dom

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

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

Serializacja IAsyncEnumerable

System.Text.Json teraz obsługuje serializacji i deserializacji IAsyncEnumerable<T> z wystąpieniami. Asynchroniczne metody serializacji wyliczają wszystkie IAsyncEnumerable<T> wystąpienia 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 (Serializacja IAsyncEnumerable).

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 serializacji i deserializacji do strumienia:

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

Aby uzyskać więcej informacji na temat serializacji i deserializacji za pomocą System.Text.Jsonprogramu , zobacz serializacja i deserializacja JSON 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 Używanie protokołu HTTP/3 z klientem HttpClient.

ASP.NET Core

ASP.NET Core zawiera ulepszenia w minimalnych interfejsach API, kompilację przed czasem (AOT) dla aplikacji Zestawu WebAssembly platformy Blazor i aplikacji jednostronicowych. Ponadto składniki platformy Blazor można teraz renderować z poziomu języka JavaScript i zintegrowane z istniejącymi aplikacjami opartymi na języku JavaScript. Aby uzyskać więcej informacji, zobacz Co nowego w programie ASP.NET Core 6.

OpenTelemetry

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

Zabezpieczenia

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 ona możliwości sprzętu, który chroni przed atakami porwania 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ść platformy .NET 6 ze stosami w tle 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, umożliwiając jednoczesne zapisywanie i wykonywanie stron pamięci.

Przycinanie IL

Ulepszono przycinanie 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 domyślnie włączone . Aby uzyskać więcej informacji, zobacz Przycinanie samodzielnych wdrożeń i plików wykonywalnych.

Analiza kodu

Zestaw .NET 6 SDK zawiera kilka nowych analizatorów kodu, które dotyczą zgodności interfejsu API, zgodności platformy, bezpieczeństwa przycinania, używania zakresu w łączenia ciągów i dzielenia, szybszego interfejsu API ciągów i szybszych interfejsów API kolekcji. Aby uzyskać pełną listę nowych (i usuniętych) analizatorów, zobacz Analizator wydania — .NET 6.

Niestandardowe osłony platform

Analizator zgodności platformy Is<Platform> rozpoznaje metody w OperatingSystem klasie, na przykład OperatingSystem.IsWindows(), jako strażniki platformy. Aby zezwolić na niestandardowe osłony platformy, platforma .NET 6 wprowadza dwa nowe atrybuty, których można użyć do dodawania adnotacji do pól, właściwości lub metod z obsługiwaną lub nieobsługiwaną nazwą platformy:

Windows Forms

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

Szablony aplikacji windows Forms języka C# zostały zaktualizowane w celu obsługi global using dyrektyw, przestrzeni nazw o zakresie plików i typów odwołań dopuszczanych do wartości null. Ponadto obejmują one kod bootstrap aplikacji, co zmniejsza standardowy kod i umożliwia projektantowi Windows Forms renderowanie powierzchni projektowej w preferowanej czcionki. Kod bootstrap jest wywołaniem 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ślna za pomocą właściwości ApplicationDefaultFont MSBuild, ApplicationConfiguration.Initialize() emituje wywołanie metody SetDefaultFont(Font).

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

Kompilacja źródłowa

Źródło tarball, który zawiera wszystkie źródła 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 elementy monikers (TFM) specyficzne dla systemu operacyjnego dla platformy .NET 6, na przykład net6.0-android, net6.0-iosi net6.0-macos. Aby uzyskać więcej informacji, zobacz Program TFMs specyficzny dla systemu operacyjnego .NET 5+.

Ogólna matematyka

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

Walidacja pakietu NuGet

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

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

Aby uzyskać więcej informacji, zobacz wpis w blogu Dotyczącym weryfikacji pakietów.

Interfejsy API Emocje ion

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

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.

Przestrzeń nazw Ulepszenia
Microsoft.Extensions.DependencyInjection CreateAsyncScope umożliwia bezpieczne używanie using instrukcji dla dostawcy usług, który rejestruje usługę IAsyncDisposable .
Microsoft.Extensions.Hosting Nowe ConfigureHostOptions metody upraszczają konfigurację aplikacji.
Microsoft.Extensions.Logging Microsoft.Extensions.Logging ma nowy generator źródeł dla wydajnych interfejsów API rejestrowania. Generator źródła jest wyzwalany w przypadku dodania nowego LoggerMessageAttribute do metody rejestrowania partial . W czasie kompilacji generator generuje implementację partial metody, 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 Wyszukuje maksymalnie lub minimalne elementy przy użyciu selektora klawiszy.
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 porównania.
Enumerable.Take<TSource>(IEnumerable<TSource>, Range) Range Akceptuje argument, aby uprościć wykonywanie fragmentu sekwencji — na przykład można użyć polecenia source.Take(2..7) zamiast source.Take(7).Skip(2).
Enumerable.Zip<TFirst,TSecond,TThird>(IEnumerable<TFirst>, IEnumerable<TSecond>, IEnumerable<TThird>) Tworzy sekwencję krotki 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ęść DateTimegodziny elementu . DateOnly jest przydatna w przypadku urodzin i rocznic oraz 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 do scenariuszy, 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, zobacz Ulepszenia daty, godziny i strefy czasowej na platformie .NET 6.

PriorityQueue, klasa

Nowa PriorityQueue<TElement,TPriority> klasa reprezentuje kolekcję elementów, które mają zarówno wartość, jak i priorytet. Elementy są w kolejce w kolejności rosnącego priorytetu — czyli element o najniższej wartości priorytetu jest najpierw odsyłany. Ta klasa implementuje minimalną strukturę danych stert .

Zobacz też