Neuerungen in .NET 6
.NET 6 liefert die endgültigen Teile des .NET-Einigungsplans, der mit .NET 5begonnen hat. .NET 6 vereint das SDK, Die Basisbibliotheken und die Laufzeit für mobile, Desktop-, IoT- und Cloud-Apps. Zusätzlich zu dieser Vereinigung bietet das .NET 6-Ökosystem Folgendes:
Vereinfachte Entwicklung: Die ersten Schritte sind einfach. Neue Sprachfunktionen in C# 10 verringern die Menge an Code, den Sie schreiben müssen. Und Investitionen in den Webstapel und minimale APIs machen es einfach, kleinere, schnellere Microservices schnell zu schreiben.
Bessere Leistung: .NET 6 ist das schnellste Full-Stack-Webframework, das die Rechenkosten senkt, wenn Sie in der Cloud arbeiten.
Ultimative Produktivität: .NET 6 und Visual Studio 2022 bieten Hot-Reload, neue Git-Tools, intelligente Code-Editierung, robuste Diagnose- und Testwerkzeuge sowie bessere Teamzusammenarbeit.
.NET 6 wird drei Jahre lang als LTS-Release (Long-Term Support) unterstützt.
Vorschaufunktionen sind standardmäßig deaktiviert. Sie werden auch nicht für die Verwendung in der Produktion unterstützt und können in einer zukünftigen Version entfernt werden. Die neue Klasse RequiresPreviewFeaturesAttribute wird verwendet, um Vorschau-APIs zu kommentieren, und ein entsprechendes Analyseprogramm warnt Sie, wenn Sie diese Vorschau-APIs verwenden.
.NET 6 wird von Visual Studio 2022 und höheren Versionen unterstützt.
In diesem Artikel werden nicht alle neuen Features von .NET 6 behandelt. Alle neuen Features und weitere Informationen zu den in diesem Artikel aufgeführten Features finden Sie im Blogbeitrag Ankündigung von .NET 6.
Leistung
.NET 6 enthält zahlreiche Leistungsverbesserungen. In diesem Abschnitt werden einige der Verbesserungen in FileStream, der profilgesteuerten Optimierung und der AOT-Kompilierung aufgeführt. Ausführliche Informationen finden Sie im Blogbeitrag Leistungsverbesserungen in .NET 6.
FileStream
Der System.IO.FileStream Typ wurde für .NET 6 umgeschrieben, um eine bessere Leistung und Zuverlässigkeit unter Windows zu gewährleisten. Jetzt wird die Klasse FileStream nie blockiert, wenn Sie für asynchrone E/A-Vorgänge unter Windows erstellt wird. Weitere Informationen finden Sie im Blogbeitrag Verbesserungen an Datei-E/A in .NET 6.
Profilgesteuerte Optimierung
Profilgeführte Optimierung (PGO) ist der Ort, an dem der JIT-Compiler optimierte Code in Bezug auf die Typen und Codepfade generiert, die am häufigsten verwendet werden. Mit .NET 6 wird die dynamische PGO eingeführt. Die dynamische PGO ist eng mit der mehrstufigen Kompilierung verzahnt, um den Code auf Grundlage der zusätzlichen Instrumentierung in Ebene 0 zu weiter zu optimieren. Dynamisches PGO ist standardmäßig deaktiviert. Sie können es jedoch mit der Umgebungsvariable DOTNET_TieredPGO
aktivieren. Weitere Informationen finden Sie unter Verbesserungen der JIT-Leistung.
Crossgen2
.NET 6 führt Crossgen2, den Nachfolger von Crossgen, ein, der entfernt wurde. Crossgen und Crossgen2 sind Tools, die eine AOT-Kompilierung (Ahead-of-Time) ermöglichen, um die Startzeit einer App zu verbessern. Crossgen2 ist in C# anstelle von C++ geschrieben und kann Analysen und Optimierungen durchführen, die mit der vorherigen Version nicht möglich waren. Weitere Informationen finden Sie in diesem Interview zu Crossgen2.
Arm64-Unterstützung
Die .NET 6-Version enthält Unterstützung für macOS Arm64 (oder "Apple Silicon") und Windows Arm64-Betriebssysteme, sowohl für native Arm64-Ausführung als auch für x64-Emulation. Darüber hinaus werden die .NET-Installationsprogramme für x64 und ARM64 jetzt parallel installiert. Weitere Informationen finden Sie unter .NET-Unterstützung für macOS 11 und Windows 11 für ARM64 und x64.
Erneut laden im laufenden Betrieb
Hot reload ist ein Feature, mit dem Sie den Quellcode Ihrer App ändern und diese Änderungen sofort auf Ihre ausgeführte App anwenden können. Der Zweck des Features besteht darin, Ihre Produktivität zu steigern, indem App-Neustarts zwischen Bearbeitungen vermieden werden. Hot Reload ist in Visual Studio 2022 und dem Befehlszeilentool dotnet watch
verfügbar. Hot Reload funktioniert mit den meisten Typen von .NET-Apps sowie für C#-, Visual Basic- und C++-Quellcode. Weitere Informationen finden Sie im Blogbeitrag zu Hot Reload.
.NET MAUI
.NET Multi-Platform App UI (.NET MAUI) befindet sich derzeit noch in der Vorschauphase. Ein Release Candidate wird im ersten Quartal 2022 und eine allgemein verfügbare Version im zweiten Quartal 2022 veröffentlicht. .NET MAUI ermöglicht es, systemeigene Client-Apps für Desktop- und mobile Betriebssysteme mit einer einzigen Codebasis zu erstellen. Weitere Informationen finden Sie im Blogbeitrag Update zu .NET Multi-Platform App UI.
C# 10 und Vorlagen
In C# 10 wurden Innovationen wie global using
-Anweisungen, dateibezogene Namespacedeklarationen und Datensatzstrukturen eingeführt. Weitere Informationen finden Sie unter C#-Sprachen-Versionsverlauf.
In Abstimmung mit dieser Arbeit wurden die .NET SDK-Projektvorlagen für C# modernisiert, um einige der neuen Sprachfeatures zu verwenden:
-
async Main
-Methode - Top-Level-Anweisungen
- Zieltypisierte neue Ausdrücke
- Implizite
global using
-Anweisungen - Dateibereichsnamespaces
- Nullwertfähige Verweistypen
Durch Hinzufügen dieser neuen Sprachfunktionen zu den Projektvorlagen beginnt neuer Code mit aktivierten Funktionen. Der vorhandene Code ist jedoch nicht betroffen, wenn Sie ein Upgrade auf .NET 6 durchführen. Weitere Informationen zu diesen Vorlagenänderungen finden Sie im Blogbeitrag .NET SDK: Modernisierte C#-Projektvorlagen.
F# und Visual Basic
F# 6 fügt der F#-Sprache und dem F# Interactive mehrere Verbesserungen hinzu. Weitere Informationen finden Sie unter Neuerungen in F# 6.
Visual Basic bietet Verbesserungen in der Visual Studio-Erfahrung und beim Start von Windows Forms-Projekten.
SDK-Workloads
Um die Größe des .NET SDK kleiner zu halten, wurden einige Komponenten in neuen, optionalen SDK-Workloadsplatziert. Zu diesen Komponenten gehören .NET MAUI und Blazor WebAssembly AOT. Wenn Sie Visual Studio verwenden, kümmert sich die Software um die Installation aller benötigten SDK-Workloads. Wenn Sie die .NET CLI-verwenden, können Sie Workloads mit den neuen dotnet workload
-Befehlen verwalten:
Befehl | Beschreibung |
---|---|
dotnet workload search | Sucht nach verfügbaren Workloads |
dotnet workload install | Installiert eine angegebene Workload |
dotnet workload uninstall | Entfernt eine angegebene Workload |
dotnet workload update | Aktualisiert installierte Workloads |
dotnet workload repair | Installiert alle installierten Workloads neu, um eine fehlerhafte Installation zu reparieren. |
dotnet workload list | Listet installierte Workloads auf |
Weitere Informationen finden Sie unter Optionale SDK-Workloads.
System.Text.Json-APIs
An System.Text.Json wurden in .NET 6 viele Verbesserungen vorgenommen, sodass es sich jetzt um eine branchentaugliche Serialisierungslösung handelt.
Quell-Generator
.NET 6 fügt einen neuen Quellgenerator für System.Text.Jsonhinzu. Die Quellgenerierung funktioniert mit JsonSerializer und kann auf mehrere Arten konfiguriert werden. Sie kann die Leistung verbessern, die Arbeitsspeicherauslastung reduzieren und das Kürzen von Assemblys vereinfachen. Weitere Informationen finden Sie unter Tipps zur Auswahl zwischen der Reflexion und der Quellgenerierung in System.Text.Json und Verwenden der Quellgenerierung in System.Text.Json.
Schreibbares DOM
Ein neues, beschreibbares Dokumentobjektmodell (DOM) wurde hinzugefügt, das das vorhandene schreibgeschützte DOM ergänzt. Die neue API stellt eine schlanke Serialisierungsalternative für Fälle dar, in denen die Verwendung von Plain Old CLR Object-Typen (POCO) nicht möglich ist. Außerdem können Sie effizient zu einem Unterabschnitt einer großen JSON-Struktur navigieren und ein Array lesen oder ein POCO aus diesem Unterabschnitt deserialisieren. Die folgenden neuen Typen wurden hinzugefügt, um das schreibbare DOM zu unterstützen:
Weitere Informationen finden Sie unter JSON-Optionen für DOMs.
IAsyncEnumerable-Serialisierung
System.Text.Json unterstützt jetzt die Serialisierung und Deserialisierung mit IAsyncEnumerable<T>-Instanzen. Asynchrone Serialisierungsmethoden enumerieren alle IAsyncEnumerable<T> Instanzen in einem Objektdiagramm und serialisieren sie dann als JSON-Arrays. Für die Deserialisierung wurde die neue Methode JsonSerializer.DeserializeAsyncEnumerable<TValue>(Stream, JsonSerializerOptions, CancellationToken) hinzugefügt. Weitere Informationen finden Sie unter IAsyncEnumerable-Serialisierung.
Andere neue APIs
Neue Serialisierungsschnittstellen für Validierungs- und Standardwerte:
Weitere Informationen finden Sie unter Rückrufe.
Neues Attribut für die Sortierung von Eigenschaften:
-
Weitere Informationen finden Sie unter Konfigurieren der Reihenfolge serialisierter Eigenschaften.
Neue Methode zum Schreiben von unformatiertem JSON-Code:
-
Weitere Informationen finden Sie unter Schreiben von unformatiertem JSON-Code.
Synchrone Serialisierung und Deserialisierung in einen Stream:
- JsonSerializer.Deserialize(Stream, Type, JsonSerializerOptions)
- JsonSerializer.Deserialize(Stream, Type, JsonSerializerContext)
- JsonSerializer.Deserialize<TValue>(Stream, JsonSerializerOptions)
- JsonSerializer.Deserialize<TValue>(Stream, JsonTypeInfo<TValue>)
- JsonSerializer.Serialize(Stream, Object, Type, JsonSerializerOptions)
- JsonSerializer.Serialize(Stream, Object, Type, JsonSerializerContext)
- JsonSerializer.Serialize<TValue>(Stream, TValue, JsonSerializerOptions)
- JsonSerializer.Serialize<TValue>(Stream, TValue, JsonTypeInfo<TValue>)
Neue Option zum Ignorieren eines Objekts, wenn während der Serialisierung ein Verweiszyklus erkannt wird:
-
Weitere Informationen finden Sie unter Ignorieren von Zirkelbezügen.
Weitere Informationen zum Serialisieren und Deserialisieren mit System.Text.Json
finden Sie unter JSON-Serialisierung und Deserialisierung in .NET.
HTTP/3
.NET 6 enthält Vorschauunterstützung für HTTP/3, eine neue Version von HTTP. HTTP/3 löst einige vorhandene funktionale und leistungsbezogene Herausforderungen mithilfe eines neuen zugrunde liegenden Verbindungsprotokolls namens QUIC. QUIC stellt Verbindungen schneller her, und Verbindungen sind unabhängig von der IP-Adresse, sodass mobile Clients zwischen WLAN und Mobilfunknetzen roamingn können. Weitere Informationen finden Sie unter Verwendung von HTTP/3 mit HttpClient.
ASP.NET Core
In ASP.NET Core wurden Verbesserungen an den minimalistischen APIs, der AOT-Kompilierung (Ahead-of-Time) für Blazor WebAssembly-Apps und Single-Page-Apps vorgenommen. Darüber hinaus können Blazor-Komponenten nun aus JavaScript gerendert und in vorhandene JavaScript-basierte Apps integriert werden. Weitere Informationen finden Sie unter Neues in ASP.NET Core 6.
OpenTelemetry
.NET 6 bietet verbesserte Unterstützung für OpenTelemetry-, die eine Sammlung von Tools, APIs und SDKs ist, die Ihnen helfen, die Leistung und das Verhalten Ihrer Software zu analysieren. APIs im Namespace System.Diagnostics.Metrics implementieren die OpenTelemetry Metrics-API-Spezifikation. Beispielsweise gibt es vier Instrumentklassen, um verschiedene Metrikszenarien zu unterstützen. Die Instrumentenklassen sind:
Sicherheit
.NET 6 unterstützt zwei neue Ansätze zur Entschärfung von Sicherheitsrisiken als Vorschauversion: Control-Flow Enforcement Technology (CET) und Write Exclusive Execute (W^X).
CET ist eine Intel-Technologie, die in einigen neueren Intel- und AMD-Prozessoren verfügbar ist. Sie ergänzt die Hardware mit Schutzmechanismen gegen Control-Flow-Hijacking-Angriffe. .NET 6 bietet Unterstützung für CET für Windows x64-Apps, und Sie müssen es explizit aktivieren. Weitere Informationen finden Sie unter .NET 6-Kompatibilität mit Intel CET-Schattenstapeln.
W^X ist für alle Betriebssysteme mit .NET 6 verfügbar, ist jedoch nur standardmäßig auf Apple Silicon aktiviert. W^X blockiert den einfachsten Angriffspfad, indem verhindert wird, dass Speicherseiten gleichzeitig schreibbar und ausführbar sind.
IL-Kürzung
Das Kürzen eigenständiger Bereitstellungen wurde verbessert. In .NET 5 wurden nur nicht verwendete Assemblys gekürzt. .NET 6 ermöglicht auch das Entfernen von nicht verwendeten Typen und Membern. Außerdem sind Kürzungswarnungen jetzt standardmäßig aktiviert. Diese weisen Sie auf Kürzungen hin, bei denen Code entfernt wird, der zur Laufzeit verwendet wird. Weitere Informationen finden Sie unter Kürzen eigenständiger Bereitstellungen und ausführbarer Dateien.
Codeanalyse
Das .NET 6 SDK enthält neue Codeanalysetools für die API-Kompatibilität, die Plattformkompatibilität, die Kürzungssicherheit, die Verwendung von span bei der Zeichenfolgenverkettung und -teilung, schnellere Zeichenfolgen-APIs und schnellere Sammlungs-APIs. Eine vollständige Liste der neuen (und entfernten) Analysetools finden Sie unter Analysetools in .NET 6.
Individuell angepasste Plattformschutzvorrichtungen
Das Analysetool für Plattformkompatibilität erkennt die Is<Platform>
-Methoden in der Klasse OperatingSystem, zum Beispiel OperatingSystem.IsWindows(), als Plattformwächter. Um benutzerdefinierte Plattformschutze zu ermöglichen, führt .NET 6 zwei neue Attribute ein, mit denen Sie Felder, Eigenschaften oder Methoden mit einem unterstützten oder nicht unterstützten Plattformnamen annotieren können.
Windows Forms
Application.SetDefaultFont(Font) ist eine neue Methode in .NET 6, die die Standardschriftart in Ihrer Anwendung festlegt.
Die Vorlagen für in C# geschriebene Windows Forms-Apps wurden aktualisiert, damit global using
-Anweisungen, dateibezogene Namespaces und Nullable-Verweistypen unterstützt werden. Darüber hinaus enthalten sie Bootstrap-Anwendungscode, der Codebausteine reduziert und es dem Windows Forms-Designer ermöglicht, die Entwurfsoberfläche in der bevorzugten Schriftart zu rendern. Der Bootstrap-Code ist ein Aufruf von ApplicationConfiguration.Initialize()
, einer quellgenerierten Methode, die Aufrufe an andere Konfigurationsmethoden wie Application.EnableVisualStyles()ausgibt. Wenn Sie über die MSBuild-Eigenschaft ApplicationDefaultFont eine vom Standard abweichende Schriftart festlegen, gibt ApplicationConfiguration.Initialize()
außerdem einen Aufruf an SetDefaultFont(Font) aus.
Weitere Informationen finden Sie im Blogbeitrag Neuigkeiten in Windows Forms.
Quellbuild
Der Quelltarball, der alle Quellobjekte für das .NET SDK enthält, ist jetzt ein Produkt des .NET SDK-Build. Andere Organisationen, z. B. Red Hat, können ihre eigene Version des SDK mit diesem Quell-Tarball erstellen.
Zielframeworkmoniker
Es wurden weitere betriebssystemspezifische Zielframeworkmoniker (TFMs) zu .NET 6 hinzugefügt, zum Beispiel net6.0-android
, net6.0-ios
und net6.0-macos
. Weitere Informationen finden Sie unter Betriebssystemspezifische TFMs für .NET 5 und höher.
Generische Mathematik
Die Verwendung von Operatoren in generischen Typen ist in .NET 6 jetzt als Vorschauversion verfügbar. In .NET 6 wurden zahlreiche Schnittstellen eingeführt, die das neue Vorschaufeature von C# 10 verwendet, static abstract
-Schnittstellenmember. Diese Schnittstellen entsprechen verschiedenen Operatoren, z. B. IAdditionOperators
den +
Operator darstellt. Die Schnittstellen sind im System.Runtime.Experimental NuGet-Paket verfügbar. Weitere Informationen finden Sie im Blogbeitrag Generische Mathematik.
NuGet-Paketvalidierung
Wenn Sie ein NuGet-Bibliotheksentwickler sind, können Sie mit neuen Paketüberprüfungstools überprüfen, ob Ihre Pakete konsistent und wohlgeformt sind. Sie können feststellen, ob:
- Ob es Breaking Changes zwischen Paketversionen gibt
- Das Paket verfügt über den gleichen Satz öffentlicher APIs für alle laufzeitspezifischen Implementierungen.
- Ob es Lücken bei der Anwendbarkeit des Zielframeworks oder der Runtime gibt
Weitere Informationen finden Sie im Blogbeitrag Paketvalidierung.
Reflexions-APIs
.NET 6 führt die folgenden neuen APIs ein, die Code prüfen und Nullbarkeitsinformationen bereitstellen:
- System.Reflection.NullabilityInfo
- System.Reflection.NullabilityInfoContext
- System.Reflection.NullabilityState
Diese APIs sind für reflexionsbasierte Tools und Serialisierungsmodule nützlich.
Microsoft.Extensions-APIs
Mehrere Erweiterungsnamespaces weisen Verbesserungen in .NET 6 auf, wie in der folgenden Tabelle dargestellt.
Namespace | Verbesserungen |
---|---|
Microsoft.Extensions.DependencyInjection | CreateAsyncScope ermöglicht die sichere Verwendung einer using -Anweisung für einen Dienstanbieter, der einen IAsyncDisposable-Dienst registriert. |
Microsoft.Extensions.Hosting | Neue ConfigureHostOptions Methoden vereinfachen das Einrichten von Anwendungen. |
Microsoft.Extensions.Logging | Microsoft.Extensions.Logging verfügt über einen neuen Quellgenerator für performante Protokollierungs-APIs. Der Quell-Generator wird ausgelöst, wenn Sie die neue Klasse LoggerMessageAttribute einer partial -Protokollierungsmethode hinzufügen. Zur Kompilierzeit generiert der Generator die Implementierung der partial -Methode, die in der Regel zur Laufzeit schneller als vorhandene Protokollierungslösungen ist. Weitere Informationen finden Sie unter Quellgenerierung zur Kompilierzeitprotokollierung. |
Neue LINQ-APIs
Zahlreiche LINQ-Methoden wurden in .NET 6 hinzugefügt. Die meisten neuen Methoden, die in der folgenden Tabelle aufgeführt sind, weisen im System.Linq.Queryable Typ gleichwertige Methoden auf.
Verbesserungen bei Datum, Uhrzeit und Zeitzone
Die folgenden beiden Strukturen wurden in .NET 6 hinzugefügt: System.DateOnly und System.TimeOnly. Diese stellen den Datums- bzw. den Uhrzeitteil einer DateTime-Struktur dar. DateOnly ist nützlich für Geburtstage und Jahrestage, und TimeOnly ist nützlich für tägliche Alarme und wöchentliche Geschäftszeiten.
Sie können jetzt entweder Internet Assigned Numbers Authority (IANA) oder Windows-Zeitzonen-IDs auf jedem Betriebssystem verwenden, auf dem Zeitzonendaten installiert sind. Die TimeZoneInfo.FindSystemTimeZoneById(String)-Methode wurde aktualisiert, um ihre Eingaben aus einer Windows-Zeitzone automatisch in eine IANA-Zeitzone (oder umgekehrt) zu konvertieren, wenn die angeforderte Zeitzone nicht im System gefunden wird. Darüber hinaus wurden die neuen Methoden TryConvertIanaIdToWindowsId(String, String) und TryConvertWindowsIdToIanaId für Szenarien hinzugefügt, wenn Sie immer noch manuell von einem Zeitzonenformat in ein anderes konvertieren müssen.
Es gibt auch einige weitere Verbesserungen in der Zeitzone. Weitere Informationen finden Sie unter Verbesserungen an Datum, Uhrzeit und Zeitzone in .NET 6.
PriorityQueue-Klasse
Die neue PriorityQueue<TElement,TPriority> Klasse stellt eine Auflistung von Elementen dar, die sowohl einen Wert als auch eine Priorität aufweisen. Die Elemente werden in aufsteigender Prioritätsreihenfolge aus der Warteschlange entfernt. Das bedeutet, dass das Element mit dem niedrigsten Prioritätswert zuerst entfernt wird. Diese Klasse implementiert eine min heap-Datenstruktur.