.NET 7 ist der Nachfolger von .NET 6 und konzentriert sich darauf, vereinheitlicht, modern, einfach und schnell zu sein. .NET 7 wird 18 Monate lang als Standard-Support-Release (STS) unterstützt (früher bekannt als aktuelles Release).
In diesem Artikel werden die neuen Funktionen von .NET 7 aufgelistet und Links zu weiteren detaillierten Informationen zu jeder Funktion bereitgestellt.
Leistungsverbesserungen
Leistung ist ein zentraler Fokus von .NET 7, und alle Funktionen sind auf hohe Leistung ausgelegt. Darüber hinaus enthält .NET 7 die folgenden Verbesserungen, die sich speziell auf die Leistung auswirken:
- On-Stack Replacement (OSR) ergänzt die gestufte Kompilierung. Dadurch kann das Runtime-System während der Ausführung einer Methode den Code ändern, der gerade ausgeführt wird. Dadurch können lang laufende Methoden während der Ausführung zu optimierten Versionen wechseln.
- Das Profil-gesteuerte Optimieren (PGO) funktioniert jetzt auch mit OSR und ist einfacher zu aktivieren. PGO kann zusätzlich auch Delegaten und andere Elemente instrumentieren und optimieren.
- Verbesserte Codegenerierung für Arm64.
- Native AOT erzeugt eine eigenständige ausführbare Datei im Zielformat der Plattform ohne externe Abhängigkeiten. Es handelt sich um eine vollständig native Lösung, ohne IL oder JIT, die eine schnelle Startzeit und eine kleine, eigenständige Bereitstellung ermöglicht. In .NET 7 konzentriert sich Native AOT auf Konsolenanwendungen und erfordert das Trimmen von Apps.
- Leistungsverbesserungen für die Mono-Laufzeitumgebung, die Blazor WebAssembly, Android- und iOS-Apps unterstützt.
Für einen detaillierten Überblick über die leistungsbezogenen Funktionen, die .NET 7 so schnell machen, siehe den Blog-Beitrag zu den Leistungsverbesserungen in .NET 7.
System.Text.Json Serialisierung
.NET 7 enthält Verbesserungen der System.Text.Json Serialisierung in folgenden Bereichen:
- Anpassung des Serialisierungsvorgangs für spezifische Typen.
- Unterstützung für polymorphe Serialisierung von benutzerdefinierten Typ-Hierarchien.
- Unterstützung für erforderliche Member, die im JSON-Payload für die Deserialisierung vorhanden sein müssen.
Weitere Informationen zu diesen und anderen Aktualisierungen finden Sie im Blog-Beitrag zur System.Text.Json Serialisierung in .NET 7.
Generische Mathematik
.NET 7 und C# 11 enthalten Neuerungen, die es ermöglichen, mathematische Operationen generisch durchzuführen, ohne den genauen Typ zu kennen, mit dem gearbeitet wird. Beispielsweise können Sie jetzt eine Methode schreiben, die zwei Zahlen addiert, ohne eine Überladung für jeden Typ erstellen zu müssen. Stattdessen können Sie eine einzelne generische Methode schreiben, bei der der Typparameter auf einen zahlähnlichen Typ beschränkt ist. Weitere Informationen finden Sie im Artikel zur generischen Mathematik und im entsprechenden Blog-Beitrag.
Reguläre Ausdrücke
Die reguläre Ausdrucksbibliothek von .NET wurde in .NET 7 erheblich verbessert, sowohl funktional als auch in Bezug auf die Leistung. Hier sind einige der Verbesserungen:
- Die neue Option RegexOptions.NonBacktracking ermöglicht eine Übereinstimmung ohne Rückverfolgung und garantiert eine lineare Verarbeitung in Bezug auf die Eingabelänge. Der Nicht-Rückverfolgungs-Mechanismus kann nicht bei der Suche von rechts nach links verwendet werden und hat einige andere Einschränkungen, ist aber für alle regulären Ausdrücke und Eingaben schnell. Weitere Informationen finden Sie im Modus für Nicht-Rückverfolgung.
- Reguläre Ausdruck-Quellgeneratoren sind neu. Quellgeneratoren erstellen zur Kompilierzeit einen optimierten Engine für Ihr Muster und bieten Vorteile in Bezug auf die Durchsatzleistung. Der erzeugte Quellcode ist Teil Ihres Projekts und kann angezeigt und debuggt werden. Darüber hinaus gibt es ein neues Quellgeneratordiagnose SYSLIB1045, das Sie darauf hinweist, wo Sie Regex verwenden und diese Stellen in den Quellgeneratoren umwandeln können. Weitere Informationen finden Sie im Artikel zu den regulären Ausdruck-Quellgeneratoren von .NET.
- Die Leistung bei der Suche nach Groß- und Kleinschreibung wurde in .NET 7 deutlich verbessert. Dies ist möglich, weil die Verwendung von RegexOptions.IgnoreCase nicht mehr dazu führt, dass jeder Buchstabe im Muster und in der Eingabe in Kleinbuchstaben umgewandelt wird. Stattdessen wird die gesamte Arbeit bezüglich der Groß-/Kleinschreibung beim Erstellen des Regex durchgeführt.
- Regex unterstützt jetzt Spans für einige APIs. Dem Support wurden folgende neue Methoden hinzugefügt:
- Regex.EnumerateMatches
- Regex.Count
- Regex.IsMatch(ReadOnlySpan<Char>) (und einige andere Überladungen)
Weitere Informationen zu diesen und anderen Verbesserungen finden Sie im Blog-Beitrag zu den Verbesserungen bei regulären Ausdrücken in .NET 7.
.NET-Bibliotheken
Es wurden viele Verbesserungen an den APIs der .NET-Bibliotheken vorgenommen. Einige davon werden in anderen, dedizierten Abschnitten dieses Artikels erwähnt. Andere werden in der folgenden Tabelle zusammengefasst:
Beschreibung | APIs | Weitere Informationen |
---|---|---|
Unterstützung für Mikrosekunden und Nanosekunden in TimeSpan, TimeOnly, DateTime und DateTimeOffset-Typen | DateTime.Microsecond, DateTime.Nanosecond, DateTime.AddMicroseconds(Double), neue DateTime-Konstruktorüberladungen, DateTimeOffset.Microsecond, DateTimeOffset.Nanosecond, DateTimeOffset.AddMicroseconds(Double), neue DateTimeOffset-Konstruktorüberladungen, TimeOnly.Microsecond, TimeOnly.Nanosecond, TimeSpan.Microseconds, TimeSpan.Nanoseconds, TimeSpan.FromMicroseconds(Double) und andere… | Diese APIs ermöglichen es Ihnen, Mikrosekunden- und Nanosekundenwerte direkt zu verwenden, ohne auf den “Tick”-Wert zugreifen zu müssen. |
APIs zum Lesen, Schreiben, Archivieren und Extrahieren von Tar-Archiven | System.Formats.Tar | Weitere Informationen finden Sie in den Blog-Beiträgen zu .NET 7 Preview 4 und .NET 7 Preview 6. |
Rate-Limiting-APIs zum Schutz einer Ressource, indem der Datenverkehr auf einem sicheren Niveau gehalten wird | RateLimiter und andere im System.Threading.RateLimiting NuGet-Paket | Weitere Informationen finden Sie in den Blog-Beiträgen Rate limit an HTTP handler in .NET und Announcing rate limiting for .NET. |
APIs zum Lesen aller Daten aus einem Stream | Stream.ReadExactly, Stream.ReadAtLeast | Die neuen ReadExactly-Methoden lesen genau die angeforderte Anzahl von Bytes, und die neuen ReadAtLeast-Methoden lesen mindestens die angeforderte Anzahl von Bytes. |
Neue Typkonverter für DateOnly, TimeOnly, Int128, UInt128 und Half | DateOnlyConverter, TimeOnlyConverter, Int128Converter, UInt128Converter, HalfConverter | Diese neuen Typkonverter ermöglichen das Konvertieren von Wertetypen zu und von einem String. |
Metrikunterstützung für IMemoryCache | MemoryCacheStatistics, MemoryCache.GetCurrentStatistics() | Die GetCurrentStatistics()-Methode ermöglicht es Ihnen, Ereignis-Counter oder Metrik-APIs zum Verfolgen von Statistiken für einen oder mehrere Memory Caches zu verwenden. |
APIs zum Abrufen und Festlegen von Unix-Dateiberechtigungen | System.IO.UnixFileMode-Enum, File.GetUnixFileMode, File.SetUnixFileMode, FileSystemInfo.UnixFileMode, Directory.CreateDirectory(String, UnixFileMode), FileStreamOptions.UnixCreateMode | Weitere Informationen finden Sie in dem Blog-Beitrag zu .NET 7 Preview 7. |
Attribut, um anzugeben, welche Art von Syntax in einem String erwartet wird | StringSyntaxAttribute | Zum Beispiel können Sie angeben, dass ein String-Parameter einen regulären Ausdruck erwartet, indem Sie den Parameter mit [StringSyntax(StringSyntaxAttribute.Regex)] versehen. |
APIs zur Interoperabilität mit JavaScript bei der Ausführung im Browser oder auf anderen WebAssembly-Architekturen | System.Runtime.InteropServices.JavaScript | JavaScript-Apps können die erweiterte WebAssembly-Unterstützung in .NET 7 nutzen, um .NET-Bibliotheken aus JavaScript wiederzuverwenden. Weitere Informationen finden Sie in dem Artikel Use .NET from any JavaScript app in .NET 7. |
Beobachtbarkeit
.NET 7 enthält Verbesserungen in Bezug auf die Beobachtbarkeit. Beobachtbarkeit hilft, den Zustand Ihrer App besser zu verstehen, wenn sie skaliert und die technische Komplexität zunimmt. Die Beobachtbarkeitsimplementierung in .NET basiert hauptsächlich auf OpenTelemetry. Zu den Verbesserungen gehören:
- Das neue Activity.CurrentChanged-Ereignis, mit dem erkannt werden kann, wann der Span-Kontext eines verwalteten Threads geändert wird.
- Neue leistungsstarke Enumerator-Methoden für Aktivitätseigenschaften: EnumerateTagObjects(), EnumerateLinks() und EnumerateEvents().
Weitere Informationen finden Sie in dem Blog-Beitrag zu den Verbesserungen in Bezug auf die Beobachtbarkeit in .NET 7.
.NET SDK
Das .NET 7 SDK verbessert das CLI-Templating-Erlebnis. Es ermöglicht Ihnen auch das Veröffentlichen von Containern und die zentrale Paketverwaltung mit NuGet.
Vorlagen
Es wurden einige willkommene Verbesserungen am dotnet new
-Befehl und an der Vorlagenentwicklung vorgenommen.
dotnet new
Der dotnet new
-Befehl, der ein neues Projekt, eine Konfigurationsdatei oder eine Lösung auf der Grundlage einer Vorlage erstellt, unterstützt jetzt die Tab-Vervollständigung zur Erkundung von:
- verfügbaren Vorlagennamen
- Vorlagenoptionen
- zulässigen Optionswerten
Außerdem haben die Unterbefehle “install”, “uninstall”, “search”, “list” und “update” keine Präfixe mehr.
Vorlagenentwicklung
Vorlagenbeschränkungen sind ein neues Konzept für .NET 7. Damit können Sie den Kontext definieren, in dem Ihre Vorlagen zugelassen sind. Vorlagenbeschränkungen helfen dem Vorlagen-Engine, zu bestimmen, welche Vorlagen in Befehlen wie dotnet new list
angezeigt werden sollen. Sie können Ihre Vorlage auf ein Betriebssystem, einen Vorlagen-Engine-Host (wie die .NET CLI oder den Dialog “Neues Projekt” in Visual Studio) und eine installierte Workload beschränken. Die Beschränkungen werden in der Konfigurationsdatei Ihrer Vorlage definiert.
In der Vorlagenkonfigurationsdatei können Sie auch einen Vorlagenparameter als mehrere Werte zulassend kennzeichnen. Zum Beispiel erlaubt die Web-Vorlage mehrere Formen der Authentifizierung.
Weitere Informationen finden Sie in dem Blog-Beitrag zu .NET 7 Preview 6.
Veröffentlichung in einen Container
Container sind eine der einfachsten Möglichkeiten, eine Vielzahl von Anwendungen und Diensten in der Cloud zu verteilen und auszuführen. Container-Images sind jetzt ein unterstützter Ausgabetyp des .NET SDK, und Sie können containerisierte Versionen Ihrer Anwendungen mit dem dotnet publish
-Befehl erstellen. Weitere Informationen finden Sie in dem Blog-Beitrag zu der Containerunterstützung im .NET SDK und im Tutorial Containerize a .NET app with dotnet publish.
Zentrale Paketverwaltung
Sie können jetzt gemeinsame Abhängigkeiten in Ihren Projekten an einem Ort mit Hilfe der zentralen Paketverwaltung (CPM) von NuGet verwalten. Sie fügen dazu eine Directory.Packages.props
-Datei im Stammverzeichnis Ihres Repositorys hinzu. In dieser Datei setzen Sie die Eigenschaft ManagePackageVersionsCentrally
auf true
und fügen Versionen für gemeinsame Paketabhängigkeiten mit Hilfe von PackageVersion
-Elementen hinzu. In den einzelnen Projektdateien können Sie dann Version
-Attribute in PackageReference
-Elementen weglassen, die sich auf zentral verwaltete Pakete beziehen.
Weitere Informationen finden Sie unter Central package management.
P/Invoke-Quellgenerierung
.NET 7 führt eine Quellgenerierung für Platform Invokes (P/Invokes) in C# ein. Der Quellgenerierung sucht nach LibraryImportAttribute
in statischen partiellen Methoden, um die Kompilierungszeitgenerierung des Marshalling-Codes auszulösen. Durch die Generierung des Marshalling-Codes zur Kompilierzeit ist kein IL-Stub erforderlich, wie dies bei der Verwendung von DllImportAttribute
der Fall ist. Der Quellgenerator verbessert die Leistung der Anwendung und ermöglicht auch die Kompilierung im Voraus (AOT). Weitere Informationen finden Sie in den Artikeln zur Quellgenerierung für Platform Invokes und zur Verwendung benutzerdefinierter Marshaller in sourcegenerierten P/Invokes.
Weitere Veröffentlichungen
Dieser Abschnitt enthält Informationen zu verwandten Produkten, die zeitgleich mit .NET 7 veröffentlicht wurden.
Visual Studio 2022 Version 17.4
Weitere Informationen finden Sie in dem Artikel What’s new in Visual Studio 2022.
C# 11
C# 11 enthält Unterstützung für generische Mathematik, Raw-String-Literals, Datei-Scoped-Typen und andere neue Funktionen. Weitere Informationen finden Sie in dem Artikel What’s new in C# 11.
F# 7
F# 7 setzt die Bemühungen fort, die Sprache einfacher zu gestalten und die Leistung sowie die Interoperabilität mit neuen C#-Funktionen zu verbessern. Weitere Informationen finden Sie in der Ankündigung zu F# 7.
.NET MAUI
.NET Multi-platform App UI (MAUI) ist ein plattformübergreifendes Framework zum Erstellen nativer mobiler und Desktop-Apps mit C# und XAML. Es vereinheitlicht Android, iOS, macOS und Windows APIs in einer einzigen API. Informationen zu den neuesten Updates finden Sie in dem Artikel What’s new in .NET MAUI for .NET 7.
ASP.NET Core
ASP.NET Core 7.0 enthält Rate-Limiting-Middleware, Verbesserungen bei Minimal APIs und gRPC JSON Transcoding. Informationen zu allen Updates finden Sie in dem Artikel What’s new in ASP.NET Core 7.
EF Core
Entity Framework Core 7.0 enthält anbieterunabhängige Unterstützung für JSON-Spalten, verbesserte Leistung beim Speichern von Änderungen und benutzerdefinierte Reverse Engineering-Vorlagen. Informationen zu allen Updates finden Sie in dem Artikel What’s new in EF Core 7.0.
Windows Forms
Viel Arbeit wurde in Windows Forms für .NET 7 gesteckt. Verbesserungen wurden in den folgenden Bereichen vorgenommen:
- Barrierefreiheit
- High DPI und Skalierung
- Datenbindung
Weitere Informationen finden Sie in dem Artikel What’s new in Windows Forms in .NET 7.
WPF
WPF in .NET 7 enthält zahlreiche Fehlerbehebungen sowie Leistungs- und Barrierefreiheitsverbesserungen. Weitere Informationen finden Sie im Artikel What’s new for WPF in .NET 7.
Orleans
Orleans ist ein plattformübergreifendes Framework zum Erstellen robuster, skalierbarer verteilter Anwendungen. Informationen zu den neuesten Updates für Orleans finden Sie in der Migration von Orleans 3.x auf 7.0.
.NET Upgrade Assistant und CoreWCF
Der .NET Upgrade Assistant unterstützt jetzt das Upgrade von serverseitigen WCF-Anwendungen auf CoreWCF, eine von der Community erstellte Portierung von WCF auf .NET (Core). Weitere Informationen finden Sie in der Anleitung zum Upgrade eines serverseitigen WCF-Projekts zur Verwendung von CoreWCF.
ML.NET
ML.NET enthält jetzt eine Textklassifikations-API, mit der benutzerdefinierte Textklassifikationsmodelle unter Verwendung der neuesten modernen Deep-Learning-Techniken erstellt werden können. Weitere Informationen finden Sie in den Blog-Beiträgen zum AutoML-Tool und den Einführungsartikeln zur ML.NET Textklassifikations-API.