Preview-Reihe für .NET 7 startet mit neuen Webfeatures

Zehn Monate vor dem geplanten Erscheinen von .NET 7 zeigt die erste Vorschauversion einige Neuerungen für ASP.NET und zwei neue C#-Zeichenkettenfeatures.

In Pocket speichern vorlesen Druckansicht 21 Kommentare lesen

(Bild: StockStudio/Shutterstock.com)

Lesezeit: 7 Min.
Von
  • Dr. Holger Schwichtenberg
Inhaltsverzeichnis

Während Microsoft seit dem 8. November 2021 eine stabile Version von .NET 6 ausliefert und derzeit die zwanzigjährige Markteinführung von .NET feiert, steht seit der letzten Nacht auf der .NET-Download-Seite die erste Vorschauversion von .NET 7 bereit. Entwickler sollten als IDE die Version 17.2 Preview 1 von Visual Studio 2022 verwenden, die am 15. Februar 2022 erschienen ist.

Nach der Installation des .NET 7 SDK steht in Visual Studio ".NET 7.0 (Preview)" zur Auswahl (s. Abb. 1). Alternativ lässt sich das Ziel-Framework in einer bestehenden Projektdatei manuell ändern auf

<TargetFramework>net7.0</TargetFramework>

Per NuGet eingebundene Bibliotheken müssen Entwicklerinnen und Entwickler auf 7.0.0-preview.1.* aktualisieren.

Visual Studio 2022 Version 17.2 Preview bietet nach der Installation des .NET 7 SDK auch die Entwicklung mit .NET 7.0 Preview an (Abb. 1).

Die erste Vorschauversion enthält nur wenige Neuerungen – die meisten betreffen ASP.NET Core. Die in Version 6 eingeführten "Minimal APIs" bekommen in .NET 7 Preview 1 mit den Schnittstellen IFormFile und IFormFileCollection Unterstützung für den Datei-Upload. Allerdings funktioniert dieser in Minimal APIs noch nicht zusammen mit einer Authentifizierung im HTTP-Header. Ein Dateiupload war auch in ASP.NET Core bereits möglich, allerdings nur mit der ausführlicheren Syntax. Darüber hinaus unterstützen die Minimal APIs nun auch die Entgegennahme von Daten über die Klassen Stream und PipeReader.

Für ASP.NET Core SignalR gibt es einen neuen Sourcecodegenerator im NuGet-Paket Microsoft.AspNetCore.SignalR.Client.SourceGenerator. Der erzeugt auf Basis eines typisierten SignalR-Hubs nun Programmcode für einen C#-basierten SignalR-Client. Die bisherige, fehleranfällige Verwendung von Zeichenketten bei SendAsync("Methodename") und On("Methodennamen") entfällt.

Mit .NET 7 Preview 1 baut Microsoft erstmals eine Brücke zwischen den REST-APIs in ASP.NET Core in der dort ebenfalls enthaltenen Implementierung von gRPC (Google Remote Procedure Call). Das neue NuGet-Paket Microsoft.AspNetCore.Grpc.HttpApi, dessen Quellcode und Dokumentation sich auf GitHub findet, erlaubt es, gRPC-basierte Dienste wie REST-Dienste aufzurufen. Microsoft übersetzt dazu die HTTP-Verben, die URL-Parameter sowie die Nutzlast mit einem Transcoding zwischen den Formaten JSON und Protocol Buffers. Entwickler, die beide Dienstarten anbieten wollen, können somit eine Doppelimplementierung vermeiden.

Das in .NET 6 und Visual Studio 2022 eingeführte Hot Reloading zur Änderung von laufenden Anwendungen ist bisher sehr eingeschränkt und unterstützt eine Vielzahl von typischen Änderungen am Programmcode nicht. Microsoft hatte aber versprochen, die erlaubten Änderungen auszudehnen. In .NET 7 Preview 1 ist nun das Hinzufügen von Klassen und statischer Klassenmitglieder möglich.

Die Ausgabe des alternativ oder in Verbindung mit Visual Studio einsetzbaren Kommandozeilenwerkzeugs dotnet watch hat der Hersteller nun mit Emojis attraktiver gemacht (s. Abb. 2). Per Umgebungsvariable DOTNET_WATCH_RESTART_ON_RUDE_EDIT = true können Entwickler und Entwicklerinnen nun steuern, dass dotnet watch bei Änderungen, die kein Hot Reloading unterstützen (sogenannte "Rude Edits"), die Anwendung automatisch neu startet.

Emojis lockern die Textwüste auf, die dotnet watch ausgibt (Abb. 2).

Microsoft setzt in .NET 7 außerdem die Arbeiten an der verbesserten Unterstützung für die schon in C# 8 eingeführten Nullable Reference Types fort. Seit .NET 6 sind Nullable Reference Types im Standard in allen Projektvorlagen aktiviert – der Compiler warnt daher vor möglichen Nullreference-Laufzeitfehlern.

Nun in .NET 7 Preview 1 sind auch einige .NET-Klassenbibliotheken aus dem Namensraum Microsoft.Extensions (z.B. Microsoft.Extensions.Configuration) mit den sogenannten "Nullable Annotations" versehen, was die Zusammenarbeit mit Nullable Reference Types vereinfacht. Bis zum Erscheinen von .NET 7 will Microsoft alle Bibliotheken im Namensraum Microsoft.Extensions aktualisiert haben. Nun ebenfalls mit einem Fragezeichen für die mögliche Null-Übergabe deklarierbar sind die Modelltypangaben in ASP.NET MVC Views und Razor Pages (@model Typname?).

Als erste neue Features der mit .NET kommenden C#-Sprachsyntaxversion 11 liefert .NET 7 Preview 1 neue Syntax-Möglichkeiten für Zeichenketten mit. Ein "Raw Literal String" ist eine neue Form einer Zeichenkette mit Umbrüchen. Dabei beginnt die Zeichenkette mit drei oder mehr Anführungszeichen und endet mit der gleichen Anzahl von Anführungszeichen:

var rawLiteralString = """" 
 heise Developer-Schnelltest
 der ersten Preview von .NET 7
 in Visual Studio 2022 17.1 Preview 1
 """";

Die bisherigen Syntaxformen "Regular String" (Umbrüche mit \n) und "Verbatim String" (Beginn mit @) bleiben aber erlaubt:

var regularString = "\r\nheise Developer-Schnelltest\n der ersten Preview von .NET 7\n in Visual Studio 2022 17.1 Preview 1\r\n ";
 
var verbatimString = @"
 heise Developer-Schnelltest
 der ersten Preview von .NET 7
 in Visual Studio 2022 17.1 Preview 1
 ";

Visual Studio 2022 17.2 Preview bietet bereits Refactoring-Funktionen, um zwischen den drei Zeichenkettenformen umzuwandeln. Beim Versuch, mit dem üblichen Doppelklick ein Wort zu markieren, markiert Visual Studio in dem Raw Literal String derzeit die ganze Zeichenkette.

Neu in C# 11 ist auch, dass Zeilenumbrüche innerhalb von Zeichenketten-Interpolationsausdrücken in geschweiften Klammern erlaubt sind.

string name = "Dr. Holger Schwichtenberg";
var text = $"Vorname: {name
                       .Split(" ")
                       .ElementAt(1)}";

In .NET 7 Preview 1 ist nur ein kleiner Teil der für .NET 7 geplanten Neuerungen enthalten. Microsoft verrät an verschiedenen Stellen, was geplant ist. Im Rahmen der 20-Jahr-Feier ließen die Produktmanager einige Stichworte zu geplanten Features in .NET 7 fallen: leichtere Erzeugung von .NET-Anwendungen in Containern direkt via MSBuild, Blazor WebAssembly auch außerhalb des Browsers (mit WASI), Multi-Threading und Single-File-Deployment für Blazor, vereinfachte Authentifizierung in ASP.NET Core, Parameter Null Checking-Operator mit doppeltem Ausrufezeichen (!!) und generische Attribute in C# 11 sowie ein Sourcecode-Generator für reguläre Ausdrücke.

Eine Suche liefert relevante GitHub-Issues. Darüber hinaus haben einige Entwicklungsteams Roadmaps veröffentlicht, beispielsweise für C# 11, ASP.NET Core 7.0 und Entity Framework Core 7.0.

Das OR-Mapper-Entwicklungsteam hat sich abermals auf die Fahnen geschrieben, die verbliebene Lücke zum klassisches Entity Framework zu reduzieren. So sollen die Unterstützung für Entity Splitting, Table-per-Concrete-Type-Vererbung, das Mapping auf primitive Typen, die Steuerung der Code-Generierung beim Reverse Engineering per T4-Template sowie das Einfügen, Ändern und Löschen bei SaveChanges() per Stored Procedure nun endlich in Entity Framework Core 7 kommen. Darüber hinaus will das Team als neue Features Bulk Updates sowie die in .NET 6 eingeführten neuen LINQ-Operatoren wie MinBy() und MaxBy() und JSON-Spalten unterstützten (letzteres war schon für Version 6 geplant). Auch den unter dem Codenamen "Woodstar" geplanten neuen, performanteren Microsoft SQL Server-Datenbanktreiber SqlServer.Core will das Team liefern.

.NET 7 wird gegenüber .NET 6 auch wieder Breaking Changes bringen. Microsoft pflegt dazu bereits eine Liste, die bislang aber mit sechs Einträgen noch recht kurz ausfällt. .NET 7 soll im November 2022 erscheinen und wird eine Current-Version mit nur 18 Monaten Support sein.

(map)