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 enthält die neuen Features von .NET 7 und enthält Links zu detaillierteren Informationen zu den einzelnen.
Leistung
Die Leistung ist ein wichtiger Schwerpunkt von .NET 7, und alle zugehörigen Features sind im Hinblick auf die Leistung konzipiert. Darüber hinaus umfasst .NET 7 die folgenden Verbesserungen, die ausschließlich auf die Leistung abzielen:
- OSR (On-Stack Replacement) ist eine Ergänzung zur mehrstufigen Kompilierung. Es ermöglicht der Laufzeit, den Code einer momentan laufenden Methode während ihrer Ausführung zu ändern, das heißt, während sie "auf dem Stack" ist. Methoden mit langer Laufzeit können während der Ausführung zu optimierten Versionen wechseln.
- Profilgeführte Optimierung (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 erzeugt 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 konzentriert sich Native AOT auf Konsolen-Apps und erfordert, dass Apps gekürzt werden.
- Leistungsverbesserungen an der Mono-Runtime, die Blazor WebAssembly, Android und iOS-Apps unterstützt.
Einen detaillierten Überblick über viele der leistungsorientierten Features, die .NET 7 so schnell machen, finden Sie in den Leistungsverbesserungen in .NET 7 Blogbeitrag.
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 Eigenschaften.
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 für reguläre 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 Spannweiten für einige APIs. Die folgenden neuen Methoden wurden als Teil dieser Unterstützung hinzugefügt:
- Regex.EnumerateMatches
- Regex.Count
- Regex.IsMatch(ReadOnlySpan<Char>) (und ein paar andere Überladungen)
Weitere Informationen zu diesen und anderen Verbesserungen finden Sie im Blogbeitrag Verbesserungen regulärer Ausdrücke in .NET 7.
.NET-Bibliotheken
Viele Verbesserungen wurden an .NET-Bibliotheks-APIs vorgenommen. Einige werden in anderen dedizierten Abschnitten dieses Artikels erwähnt. Einige 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 andere... |
Diese APIs bedeuten, dass Sie keine Berechnungen mehr für den "Tick"-Wert durchführen müssen, um Mikrosekunden- und Nanosekundenwerte zu ermitteln. 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 .NET 7 Preview 4 und .NET 7 Preview 6 Blogbeiträgen. |
Ratenbegrenzungs-APIs zum Schutz einer Ressource durch Halten des Datenverkehrs auf einem sicheren Niveau | RateLimiter und andere im System.Threading.RateLimiting NuGet-Paket | 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 gibt möglicherweise weniger Daten zurück, als im Datenstrom 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() |
mit GetCurrentStatistics() können Sie Ereigniszähler oder Metrik-APIs verwenden, um Statistiken für einen oder mehrere Speichercaches nachzuverfolgen. Weitere Informationen finden Sie im Blogbeitrag .NET 7 Preview 4. |
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 im Blogbeitrag .NET 7 Preview 7. |
Attribut, das angibt, welche Syntax in einer Zeichenfolge erwartet wird | StringSyntaxAttribute | Sie können z. B. angeben, dass ein string -Parameter einen regulären Ausdruck erwartet, indem Sie den Parameter mit [StringSyntax(StringSyntaxAttribute.Regex)] attributieren. |
APIs für die Interoperabilität mit JavaScript beim Ausführen von Anwendungen im Browser oder auf 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. |
Beobachtbarkeit
.NET 7 verbessert den Einblick. Die Observability hilft Ihnen, 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. Zu den Verbesserungen gehören:
- 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 Erlebnis mit CLI-Vorlagen. Sie ermöglicht auch die Veröffentlichung in Containern und die zentrale Paketverwaltung mit NuGet.
Schablonen
Einige willkommene Verbesserungen wurden am Befehl dotnet new
und an der Erstellung von Vorlagen 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
Vorlagenbeschränkungen , ein neues Konzept für .NET 7, ermöglichen es Ihnen, den Kontext festzulegen, in dem Ihre Vorlagen zulässig sind. Einschränkungen helfen dem Vorlagenmodul 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 (z. B. die .NET CLI oder das Dialogfeld "Neues Projekt" in Visual Studio) und eine installierte Arbeitslast beschränken. Sie definieren Einschränkungen in der Konfigurationsdatei Ihrer Vorlage.
Außerdem können Sie in der Vorlagenkonfigurationsdatei jetzt einen Vorlagenparameter kommentieren, da mehrere Werte zulässig sind. Beispielsweise ermöglicht die web
Vorlage mehrere Authentifizierungsformen.
Weitere Informationen finden Sie im Blogbeitrag .NET 7 Preview 6.
Veröffentlichen in einem Container
Container sind eine der einfachsten Methoden zum Verteilen und Ausführen einer Vielzahl von Anwendungen und Diensten in der Cloud. 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 nun allgemeine Abhängigkeiten in Ihren Projekten von einem Ort aus mithilfe des zentralen Paketverwaltungsfeatures (CPM) von NuGet verwalten. Um dies zu aktivieren, fügen Sie dem Stammverzeichnis Ihres Repositorys eine Directory.Packages.props Datei hinzu. Legen Sie in dieser Datei die MSBuild-Eigenschaft ManagePackageVersionsCentrally
auf true
fest, und fügen Sie Versionen für allgemeine Paketabhängigkeiten mithilfe von PackageVersion
Elementen hinzu. Anschließend können Sie in den einzelnen Projektdateien die Version
-Attribute aus jeglichen PackageReference--Elementen weglassen, die auf zentral verwaltete Pakete verweisen.
Weitere Informationen finden Sie unter Zentrale Paketverwaltung.
P/Invoke-Quellgenerierung
.NET 7 führt einen Quellgenerator für Plattform-Aufrufe (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 mit Versionen, die mit der .NET 7-Version übereinstimmen.
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, um die Sprache zu vereinfachen und die Leistung und Interoperabilität mit neuen C#-Features zu verbessern. Weitere Informationen finden Sie unter Ankündigung von F# 7.
.NET MAUI
.NET Multi-Platform App UI (.NET MAUI) ist ein plattformübergreifendes Framework zum Erstellen nativer mobiler 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 Neuigkeiten in ASP.NET Core 7.
EF Core
Entity Framework Core 7.0 enthält 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 Neuigkeiten 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:
- Zugänglichkeit
- 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 robuster, skalierbarer verteilter Anwendungen. Informationen zu den neuesten Updates für Orleansfinden 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-, der ein community-erstellter Port von WCF zu .NET (Core) ist. 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, mit der individuelle Textklassifizierungsmodelle mit den neuesten Techniken des Deep Learning trainiert werden können. Weitere Informationen finden Sie in den Blogbeiträgen Neuerungen bei AutoML und Tools und Einführung der ML.NET-Textklassifizierungs-API.