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:

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:

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.

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.

Siehe auch