Neuerungen in .NET 7
.NET 7 ist der Nachfolger von .NET 6 und legt den Schwerpunkt darauf, einheitlich, modern, einfach und schnell zu sein. .NET 7 wird 18 Monate lang als STS-Release (Standard-Term Support) unterstützt (früher als aktuelles Release bezeichnet).
Dieser Artikel listet die neuen Features von .NET 7 auf und enthält Links zu ausführlicheren Informationen zu den einzelnen Features.
Informationen zu allen .NET-Artikeln, die für .NET 7 aktualisiert wurden, finden Sie in der .NET-Dokumentation: Neuerungen für die .NET 7-Version.
Leistung
Leistung ist ein wichtiger Schwerpunkt von .NET 7, und alle Features wurden unter Berücksichtigung der Leistung konzipiert. Darüber hinaus enthält .NET 7 die folgenden Verbesserungen, die rein auf Leistung ausgerichtet sind:
- OSR (On-Stack Replacement) ist eine Ergänzung zur mehrstufigen Kompilierung. Dieses Feature ermöglicht der Runtime, den Code mitten in der Ausführung zu ändern, der von einer derzeit ausgeführten Methode ausgeführt wird (das heißt, während er „im Stapel“ ist). Methoden mit langer Ausführungsdauer können in der Mitte der Ausführung zu optimierten Versionen wechseln.
- Profilgesteuerte Optimierung (Profile Guided Optimization, PGO) funktioniert jetzt mit OSR und ist einfacher zu aktivieren (durch Hinzufügen von
<TieredPGO>true</TieredPGO>
zu Ihrer Projektdatei). PGO kann auch zusätzliche Dinge instrumentieren und optimieren, z. B. Delegaten. - Verbesserte Codegenerierung für Arm64.
- Native AOT generiert eine eigenständige ausführbare Datei im Dateiformat der Zielplattform ohne externe Abhängigkeiten. Sie ist vollständig nativ, ohne IL oder JIT und bietet eine schnelle Startzeit sowie eine kleine eigenständige Bereitstellung. In .NET 7 ist native AOT für Konsolen-Apps konzipiert und erfordert, dass Apps gekürzt werden.
- Leistungsverbesserungen für die Mono-Runtime, die Blazor WebAssembly-, Android- und iOS-Apps unterstützt.
Einen ausführlichen Überblick über viele der leistungsorientierten Features, durch die .NET 7 so schnell ist, finden Sie im Blogbeitrag Leistungsverbesserungen in .NET 7.
System.Text.Json-Serialisierung
.NET 7 enthält Verbesserungen der System.Text.Json-Serialisierung in den folgenden Bereichen:
- Vertragsanpassung gibt Ihnen mehr Kontrolle darüber, wie Typen serialisiert und deserialisiert werden. Weitere Informationen finden Sie unter Anpassen eines JSON-Vertrags.
- Polymorphe Serialisierung für benutzerdefinierte Typhierarchien. Weitere Informationen finden Sie unter Serialisieren von Eigenschaften abgeleiteter Klassen.
- Unterstützung für erforderliche Member, bei denen es sich um Eigenschaften handelt, die in den JSON-Nutzdaten vorhanden sein müssen, damit die Deserialisierung erfolgreich ist. Weitere Informationen finden Sie unter Erforderliche Berechtigungen.
Informationen zu diesen und anderen Updates finden Sie im Blogbeitrag Neuerungen in System.Text.Json in .NET 7 .
Generische Mathematik
.NET 7 und C# 11 enthalten Innovationen, mit denen Sie mathematische Vorgänge generisch ausführen können, d. h. ohne den genauen Typ kennen zu müssen, mit dem Sie arbeiten. Wenn Sie beispielsweise eine Methode schreiben möchten, die zwei Zahlen hinzufügt, mussten Sie zuvor für jeden Typ eine Überladung der Methode hinzufügen. Jetzt können Sie eine einzelne generische Methode schreiben, bei der der Typparameter auf einen zahlenähnlichen Typ beschränkt ist. Weitere Informationen finden Sie im Artikel Generische Mathematik und im Blogbeitrag Generische Mathematik.
Reguläre Ausdrücke
Die Bibliothek der regulären Ausdrücke von .NET hat in .NET 7 erhebliche Funktions- und Leistungsverbesserungen erfahren:
Die neue Option RegexOptions.NonBacktracking ermöglicht den Abgleich mithilfe eines Ansatzes, der Rückverfolgungen vermeidet und lineare Zeitverarbeitung in der Länge der Eingabe garantiert. Die Nicht-Rückverfolgungs-Engine kann nicht in einer Suche von rechts nach links verwendet werden und weist einige andere Einschränkungen auf, ist aber für alle regulären Ausdrücke und Eingaben schnell. Weitere Informationen finden Sie unter Nicht zurückverfolgender Modus.
Quellgeneratoren für reguläre Ausdrücke sind neu. Quellgeneratoren erstellen eine Engine, die zur Kompilierzeit für Ihr Muster optimiert ist und bieten Vorteile bei der Durchsatzleistung. Die ausgegebene Quelle ist Teil Ihres Projekts, sodass Sie sie anzeigen und debuggen können. Darüber hinaus werden Sie durch eine neue Quellgeneratordiagnose
SYSLIB1045
auf Stellen hingewiesen,an denen Sie Regex verwenden, die in den Quellgenerator konvertiert werden können. Weitere Informationen finden Sie unter Quellgeneratoren für reguläre .NET-Ausdrücke.Bei Suchvorgängen ohne Beachtung von Groß-/Kleinschreibung bietet .NET 7 große Leistungssteigerungen. Die Vorteile ergeben sich, weil die Angabe von RegexOptions.IgnoreCase nicht mehr ToLower für jedes Zeichen im Muster und für jedes Zeichen in der Eingabe aufruft. Stattdessen werden alle Aufgaben, die sich auf Groß-/Kleinschreibung beziehen, beim Generieren von Regex ausgeführt.
Regex unterstützt jetzt Span-Eigenschaften für einige APIs. Im Rahmen dieser Unterstützung wurden die folgenden neuen 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 Blogbeitrag Verbesserungen regulärer Ausdrücke in .NET 7.
.NET-Bibliotheken
An den .NET-Bibliotheks-APIs wurden viele Verbesserungen vorgenommen. Einige davon werden in anderen, dedizierten Abschnitten dieses Artikels genannt. Andere werden in der folgenden Tabelle zusammengefasst.
Beschreibung | APIs | Weitere Informationen |
---|---|---|
Unterstützung für Mikrosekunden und Nanosekunden in den Typen TimeSpan, TimeOnly, DateTime und DateTimeOffset | - 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 weitere... |
Diese APIs bedeuten, dass Sie keine Berechnungen mehr für den „Tick“-Wert durchführen müssen, um Mikrosekunden- und Nanosekundenwerte zu bestimmen. Weitere Informationen finden Sie im Blogbeitrag .NET 7 Preview 4. |
APIs zum Lesen, Schreiben, Archivieren und Extrahieren von Tar-Archiven | System.Formats.Tar | Weitere Informationen finden Sie in den Blogbeiträgen .NET 7 Preview 4 und .NET 7 Preview 6. |
Ratenbegrenzungs-APIs zum Schutz einer Ressource durch Halten des Datenverkehrs auf einem sicheren Niveau | RateLimiter und andere im NuGet-Paket System.Threading.RateLimiting | Weitere Informationen finden Sie unter Ratenbegrenzung eines HTTP-Handlers in .NET und Ankündigung der Ratenbegrenzung für .NET. |
APIs zum Lesen aller Daten aus einem Stream | - Stream.ReadExactly - Stream.ReadAtLeast |
Stream.Read kann weniger Daten zurückgeben als im Stream verfügbar sind. Die neuen ReadExactly -Methoden lesen genau die Anzahl der angeforderten Bytes, und die neuen ReadAtLeast -Methoden lesen mindestens die Anzahl der angeforderten Bytes. Weitere Informationen finden Sie im Blogbeitrag .NET 7 Preview 5. |
Neue Typkonverter für DateOnly , TimeOnly , Int128 , UInt128 und Half |
Im System.ComponentModel-Namespace: - DateOnlyConverter - TimeOnlyConverter - Int128Converter - UInt128Converter - HalfConverter |
Typkonverter werden häufig verwendet, um Werttypen in eine und aus einer Zeichenfolge zu konvertieren. Diese neuen APIs fügen Typkonverter für Typen hinzu, die kürzlich hinzugefügt wurden. |
Metrikunterstützung für IMemoryCache | - MemoryCacheStatistics - MemoryCache.GetCurrentStatistics() |
GetCurrentStatistics() ermöglicht die Verwendung von Ereigniszählern oder Metrik-APIs zum Nachverfolgen von Statistiken für mindestens einen Arbeitsspeichercache. Weitere Informationen finden Sie im Blogbeitrag .NET 7 Preview 4. |
APIs zum Abrufen und Festlegen von Unix-Dateiberechtigungen | - System.IO.UnixFileMode-Enumeration - File.GetUnixFileMode - File.SetUnixFileMode - FileSystemInfo.UnixFileMode - Directory.CreateDirectory(String, UnixFileMode) - FileStreamOptions.UnixCreateMode |
Weitere Informationen finden Sie im Blogbeitrag .NET 7 Preview 7. |
Attribut zum Angeben, welche Art von Syntax in einer Zeichenfolge erwartet wird | StringSyntaxAttribute | Sie können beispielsweise angeben, dass ein string -Parameter einen regulären Ausdruck erwartet, indem Sie den Parameter mit dem Attribut [StringSyntax(StringSyntaxAttribute.Regex)] versehen. |
APIs für die Interoperabilität mit JavaScript bei Ausführung im Browser oder in anderen WebAssembly-Architekturen | System.Runtime.InteropServices.JavaScript | JavaScript-Apps können die erweiterte WebAssembly-Unterstützung in .NET 7 verwenden, um .NET-Bibliotheken aus JavaScript wiederzuverwenden. Weitere Informationen finden Sie unter Verwenden von .NET aus einer beliebigen JavaScript-App in .NET 7. |
Einblick
.NET 7 verbessert den Einblick. Einblicke helfen Ihnen dabei, den Zustand Ihrer App zu verstehen, während sie skaliert wird und die technische Komplexität zunimmt. Die Einblickimplementierung von .NET basiert in erster Linie auf OpenTelemetry. Die Verbesserungen umfassen:
- Das neue Activity.CurrentChanged-Ereignis, mit dem Sie erkennen können, wann sich der Span-Kontext eines verwalteten Threads ändert.
- Neue, leistungsfähige Enumeratormethoden für Activity-Eigenschaften: EnumerateTagObjects(), EnumerateLinks() und EnumerateEvents().
Weitere Informationen finden Sie im Blogbeitrag .NET 7 Preview 4.
.NET SDK
Das .NET 7 SDK verbessert das Arbeiten mit CLI-Vorlagen. Es ermöglicht auch die Veröffentlichung in Containern und zentrale Paketverwaltung mit NuGet.
Vorlagen
Für den dotnet new
-Befehl und die Vorlagenerstellung wurden einige willkommene Verbesserungen vorgenommen.
dotnet new
Der CLI-Befehl dotnet new
, mit dem ein neues Projekt, eine Konfigurationsdatei oder eine neue Projektmappe basierend auf einer Vorlage erstellt wird, unterstützt jetzt Vervollständigung mit der TAB-TASTE für die Untersuchung der folgenden Elemente:
- Verfügbare Vorlagennamen
- Vorlagenoptionen
- Zulässige Optionswerte
Außerdem weisen die Unterbefehle install
, uninstall
, search
, list
und update
für bessere Konformität nicht mehr das Präfix --
auf.
Erstellen
Mit Vorlageneinschränkungen, einem neuen Konzept für .NET 7, können Sie den Kontext definieren, in dem Ihre Vorlagen zulässig sind. Einschränkungen unterstützen die Vorlagen-Engine beider Ermittlung, welche Vorlagen in Befehlen wie dotnet new list
angezeigt werden sollen. Sie können Ihre Vorlage auf ein Betriebssystem, einen Vorlagen-Engine-Host (z. B. die .NET CLI oder das Dialogfeld „Neues Projekt“ in Visual Studio) und eine installierte Workload einschränken. Sie definieren Einschränkungen in der Konfigurationsdatei Ihrer Vorlage.
In der Vorlagenkonfigurationsdatei können Sie jetzt außerdem einen Vorlagenparameter mit der Anmerkungen versehen, dass er mehrere Werte zulässt. Die web
-Vorlage ermöglicht beispielsweise mehrere Authentifizierungsformen.
Weitere Informationen finden Sie im Blogbeitrag .NET 7 Preview 6.
Veröffentlichen in einem Container
Container sind eine der einfachsten Möglichkeiten, eine Vielzahl von Anwendungen und Diensten in der Cloud zu verteilen und auszuführen. Containerimages sind jetzt ein unterstützter Ausgabetyp des .NET SDK, und Sie können containerisierte Versionen Ihrer Anwendungen mit dotnet publish
erstellen. Weitere Informationen zum Feature finden Sie unter Ankündigung von integrierter Containerunterstützung für das .NET SDK. Ein Tutorial finden Sie unter Containerisieren einer .NET-App mit dotnet publish.
Zentrale Paketverwaltung
Sie können jetzt allgemeine Abhängigkeiten in Ihren Projekten an einem Ort verwalten, indem Sie das CPM-Feature (Central Package Management, zentrale Paketverwaltung) von NuGet verwenden. Um dieses Feature zu aktivieren, fügen Sie dem Stammverzeichnis Ihres Repositorys eine Datei Directory.Packages.props hinzu. Legen Sie in dieser Datei die MSBuild-Eigenschaft ManagePackageVersionsCentrally
auf fest true
, und fügen Sie Versionen für allgemeine Paketabhängigkeiten mithilfe von PackageVersion
-Elementen hinzu. Anschließend können Sie in den einzelnen Projektdateien Version
-Attribute aus allen PackageReference-Elementen auslassen, die auf zentral verwaltete Pakete verweisen.
Weitere Informationen finden Sie unter Zentrale Paketverwaltung.
P/Invoke-Quellgenerierung
.NET 7 führt einen Quellgenerator für Plattformaufrufe (P/Invokes) in C# ein. Der Quellgenerator sucht nach LibraryImportAttribute für static
, partial
Methoden, um die Quellgenerierung von Marshallingcode zur Kompilierzeit auszulösen. Durch Generieren des Marshallingcodes zur Kompilierzeit muss kein IL-Stub zur Laufzeit generiert werden, wie es bei Verwendung von DllImportAttribute der Fall ist. Der Quellgenerator verbessert die Anwendungsleistung und ermöglicht auch, dass die App Ahead-of-Time (AOT) kompiliert wird. Weitere Informationen finden Sie unter Quellgenerierung für Plattformaufrufe und Verwenden von benutzerdefinierten Marshallern in quellgenerierten P/Invokes.
Zugehörige Releases
Dieser Abschnitt enthält Informationen zu verwandten Produkten, deren Releases mit dem Release von .NET 7 zusammenfallen.
Visual Studio 2022, Version 17.4
Weitere Informationen finden Sie unter Neuerungen in Visual Studio 2022.
C# 11
C# 11 umfasst Unterstützung für generische Mathematik, unformatierte Zeichenfolgenliterale, dateibezogene Typen und andere neue Features. Weitere Informationen finden Sie unter Neuerungen in C# 11.
F# 7
F# 7 setzt den Weg fort, die Sprache zu vereinfachen und die Leistung und Interoperabilität mit neuen C#-Funktionen zu verbessern. Weitere Informationen finden Sie unter Ankündigung von F# 7.
.NET MAUI
.NET MAUI (Multi-Platform App UI) ist ein plattformübergreifendes Framework zum Erstellen nativer Mobil- und Desktop-Apps mit C# und XAML. Es vereint Android-, iOS-, macOS- und Windows-APIs in einer einzigen API. Informationen zu den neuesten Updates finden Sie unter Neuerungen in .NET MAUI für .NET 7.
ASP.NET Core
ASP.NET Core 7.0 umfasst ratenlimitierende Middleware, Verbesserungen an minimalen APIs und gRPC-JSON-Transcodierung. Informationen zu allen Updates finden Sie unter Neuerungen in ASP.NET Core 7.
EF Core
Entity Framework Core 7.0 umfasst anbieterunabhängige Unterstützung für JSON-Spalten, verbesserte Leistung zum Speichern von Änderungen und benutzerdefinierte Reverse Engineering-Vorlagen. Informationen zu allen Updates finden Sie unter Neuerungen in EF Core 7.0.
Windows Forms
Viel Arbeit wurde in Windows Forms für .NET 7 investiert. In den folgenden Bereichen wurden Verbesserungen vorgenommen:
- Barrierefreiheit
- Hoher DPI-Wert und Skalierung
- Datenbindung
Weitere Informationen finden Sie unter Neuerungen in Windows Forms in .NET 7.
WPF
WPF in .NET 7 enthält zahlreiche Fehlerbehebungen sowie Leistungs- und Barrierefreiheitsverbesserungen. Weitere Informationen finden Sie im Blogbeitrag Neuerungen für WPF in .NET 7 .
Orleans
Orleans ist ein plattformübergreifendes Framework zum Erstellen stabiler und skalierbarer verteilter Anwendungen. Weitere Informationen zu den neuesten Updates für Orleans finden Sie unter Migrieren von Orleans 3.x zu 7.0.
.NET-Upgrade-Assistent und CoreWCF
Der .NET-Upgrade-Assistent unterstützt jetzt das Upgrade serverseitiger WCF-Apps auf CoreWCF, einen von der Community erstellten Port von WCF zu .NET (Core). Weitere Informationen finden Sie unter Upgrade eines serverseitigen WCF-Projekts auf die Verwendung von CoreWCF.
ML.NET
ML.NET enthält jetzt eine Textklassifizierungs-API, die das Trainieren benutzerdefinierter Textklassifizierungsmodelle mithilfe der neuesten Deep Learning-Techniken vereinfacht. Weitere Informationen finden Sie in den Blogbeiträgen Neuerungen bei AutoML und Tools und Einführung der ML.NET-Textklassifizierungs-API.