5 wichtige Neuerungen von .NET 7 und C# 11

7 Min. Lesezeit
7. Dezember 2022

Microsoft hat Anfang November 2022 mit .NET 7 die neueste Version der beliebten Entwickler-Plattform veröffentlicht. In diesen Beitrag werden fünf wichtige Änderungen kurz vorgestellt. Die Reihenfolge hat dabei keine Gewichtung oder Bedeutung. Insgesamt sind über 7.000 Pull Requests in .NET 7 geflossen. Dieses Release ist eine Standard Term Support (kurz STS) Version. STS-Versionen werden bis zu sechs Monate nach dem Release der nächsten Versionen offiziell mit Updates unterstützt. Mit dem jährlichen Release-Zyklus von .NET ergibt sich dadurch eine offizielle Unterstützungszeit von 18 Monaten. Daher kann .NET 7 ohne große Bedenken in Produktionsszenarien verwendet werden. Die nächste Long Term Support Version wird im November 2023 mit .NET 8 erwartet.

1. .NET Multi-Plattform App UI (.NET MAUI)

Mit der .NET Multi-Plattform App UI (kurz .NET MAUI) ist es möglich, Mobile und Desktop Anwendungen mit C# und XAML zu entwickeln. Dabei werden alle gängigen Betriebssysteme wie Windows, macOS, iOS, iPadOS und Android unterstützt. Microsoft setzt dabei auf die bereits bestehende Technologie von Xamarin.Forms auf und hat diese konsequent in einem Open-Source Projekt weiterentwickelt. Mit .NET MAUI ist es möglich, alles in einem einzigen Projekt abzubilden und sehr viel Source Code in einer einzelnen Codebasis zu teilen. Bei Bedarf kann auch plattformspezifischer Code hinzugefügt werden. Der Source Code kann über das verlinkte GitHub Profil eingesehen werden. .NET MAUI wurde bereits mit .NET 6 im Beta Status veröffentlich und konnte von Interessierten vorab getestet werden. Mit dem letzten Release von .NET wurde .NET MAUI aus dem Beta Status herausgeholt und offiziell freigegeben.

architektur-ueabersichtAbbildung 1: Übersicht Architektur

Im oben gezeigten Architektur Diagramm ist der Vorteil von .NET MAUI auf einen Blick ersichtlich. Der Anwendungscode (App Code) kann für mehrere Betriebssysteme verwendet werden. Wie eingangs erwähnt können aber nicht nur Desktop System (wie mit anderen Systemen bereits möglich) angesprochen werden, sondern auch mobile Betriebssysteme. Das kann durchaus ein Game Changer für .NET und C# sein, da bisher die Entwicklung für mobile Betriebssysteme hauptsächlich mit Swift, Objective-C, Java oder Kotlin erfolgte, aber kaum mit C#. Darüber hinaus gibt es noch JavaScript lastige Frameworks wie Ionic, die eine Plattformübergreifende ermöglichen, aber zusätzliches Wissen mit Webframeworks voraussetzen.

Über .NET MAUI können unter anderem folgende plattformübergreifende Gerätefeatures verwendet werden. Zugriff auf Sensoren wie Beschleunigungsmesser, Kompass und Gyroskop ist einfach auf den Geräten möglich.

  • Möglichkeit, den Netzwerkkonnektivitätsstatus des Geräts zu überprüfen und Änderungen zu erkennen.
  • Geben Sie Informationen zum Gerät an, auf dem die App ausgeführt wird.
  • Kopieren Sie Text, und fügen Sie ihn zwischen Apps in die Systemablage ein.
  • Wählen Sie einzelne oder mehrere Dateien vom Gerät aus.
  • Speichern Sie Daten sicher als Schlüssel-Wert-Paare.
  • Verwenden Sie integrierte Text-zu-Sprache-Engines, um Text vom Gerät zu lesen.
  • Initiieren Sie browserbasierte Authentifizierungsflows, die auf einen Rückruf für eine bestimmte app-registrierte URL lauschen.

Diese Liste spiegelt den aktuellen Stand Ende 2022 wider und wird von Microsoft sicher in den nächsten Versionen und Releases erweitert. Für mehr Details empfiehlt sich folgender Link.

2. C# 11

Gemeinsam mit .NET 7 wurde eine neue Version der Programmiersprache C# veröffentlicht. Version 11 bringt hierbei eine ganze Liste von Neuerungen, die wir hier kurz zusammenfassen.

Generische Attribute

Mit C# 11 ist es möglich Attribute generisch zu definieren. Bisher musste der Typ über den Konstruktor des Attributs mitgegeben werden. Die neue Variante vereinfacht die Verwendung von generischen Attributen deutlich und erhöht die Lesbarkeit.

generische-attribute-1

Das führte zur nicht schönen Situation, dass der typeof Operator beim Verwenden des Attributs verwendet werden musste.

generische-attribute-2

C# 11 erlaubt die Definition von Attributen mit Generics.

generische-attribute-3

Die Verwendung der generischen Attribute ist wie von anderen generischen Implementierungen wie gewohnt denkbar einfach.

generische-attribute-4

Die Verwendeten Typen müssen allerdings die gleichen Voraussetzungen wie jene erfüllen, die über den typeof Operator übergeben werden. Daraus ergibt sich nachfolgende Liste von nicht unterstützten Typen.

  • dynamic
  • string? (oder jeder andere nullable Referenztyp)
  • (int X, int Y) (oder jede andere Tuple-Typ in C#, der die C# Tuple Syntax verwendet).

Es besteht allerdings die Möglichkeit, die darunterliegenden Typen anstelle der obigen zu verwenden.

  • object anstatt dynamic
  • string anstatt string?
  • ValueTuple<int, int> anstatt of (int X, int Y)

Unformatierte Zeichenfolgenliterale

Mit den neuen unformatierte Zeichenfolgenliteralen ist es endlich möglich, Zeichenketten einfach und leserlich über mehrere Zeilen im Source Code darzustellen. Bisher war es nur über aufwändige – und fehleranfällige – Verkettung mittels + oder += möglich. Abgesehen davon gibt es die Möglichkeit Textketten mit Text Interpolation, String.Format, StringBuilder etc. zu erstellen, aber diese sind auf den ersten Blick deutlich unleserlicher.

unformatierte-zeichenfolgenliterale-1

Ebenso ist es nicht mehr notwendig doppelte Anführungszeichen, wie im Beispiel oben, in einer Escape-Sequenz zu behandeln, sondern die Anführungszeichen können einfach verwendet werden.

Zusätzlich können Zeichenfolgenliterale mit Zeigenfolgeninterpolation gemeinsam kombiniert werden. Dabei gibt die Anzahl der $-Zeichen an, wie viele aufeinanderfolgende geschwungene Klammern notwendig sind, um die Interpolation zu starten und zu beenden.

unformatierte-zeichenfolgenliterale-2

Dabei ist zu beachten, dass die Anzahl der geschwungenen Klammern immer mit zwei beginnt. Soll heißen, bei zwei Doller Zeichen sind insgesamt drei geschwungene Klammern notwendig und so weiter.

3. Bessere Cloud Native und Container Unterstützung

.NET 7 macht es erheblich einfacher Cloud Native Anwendungen zu entwickeln. Direkt in Visual Studio gibt es jede Menge an integrierten und verbundenen Diensten für Datenanbindungen und zur sicheren Aufbewahrung von Anwendungssecrets in Azure KeyVault. Die Anwendungen können ebenso direkt in Containern entwickelt, debuggt und gebaut werden. Bei der Erstellung eines neuen Projekts werden von der IDE bereits alle notwendigen Konfigurationen und das Dockerfile durchgeführt und erstellt. Damit kann direkt mit der Entwicklung über einen Container begonnen werden. Zur Bereitstellung auf einem Container Orchestrierung Dienst wie Azure Kubernetes Services werden einfach die erstellen Container in die Cloud veröffentlicht und dort betrieben.

Container Images sind ab sofort auch direkt als Ergebnis von „dotnet publish“ möglich – es entfallen damit sie sonst üblichen Schritte, um einen Container zu bauen. Sämtliche Konfigurationen, Continuous Integration und Deployment Pipelines werden damit übersichtlicher und einfacher zu warten.

container-unterstuetzung

Bestehende Anwendungen können ganz einfach angepasst werden, indem beim publish Schritt die neuen Konfigurationen verwendet werden. Dadurch entfallen eigene Schritte, die zuvor zum Bauen der Container Images notwendig waren.

4. Performance Verbesserungen

Wie bereits bei den Vorgängerversionen beinhaltet auch .NET 7 erhebliche Verbesserungen bei der Performance. Über 1.000 Pull Requests, die die Performance der Runtime und Core Bibliotheken beeinflussen sind bei der Entwicklung von .NET 7 zusammengekommen. Dazu kommen noch weitere Pull Requests, die gezielt auf ASP.NET Core, Windows Forms, Entity Framework und darüber hinaus einen positiven Effekt haben. Kurzum ist .NET 7 das bisher schnellste .NET, dass es je gab.

performance-verbesserungAbbildung 2: Performance Improvements - Quelle

Stephen Tourt – MSFT hat zu den Performance Verbesserungen in .NET 7 folgendes zu sagen.

„ .NET 7 is fast. Really fast. A thousand performance-impacting PRs went into runtime and core libraries this release, never mind all the improvements in ASP.NET Core and Windows Forms and Entity Framework and beyond. It’s the fastest .NET ever. If your manager asks you why your project should upgrade to .NET 7, you can say “in addition to all the new functionality in the release, .NET 7 is super fast.“

Um die Verbesserungen auch mit Fakten zu untermauern, wurden alle Tests mit dem benchmarkdotnet Tool durchgeführt. Tatsächlich ist dieses Tool der Industriestandard zum Messen von Ausführungszeiten, Performance und Benchmarks. Eine detaillierte Liste über alle Verbesserungen ist im offiziellen Blog von Microsoft hier zu finden.

5. HTTP/3 Support

Mit .NET 7 wird auch der aktuelle Hypertext Transfer Protokoll Standard HTTP/3 unterstützt. Im Gegensatz zu den vorherigen Versionen setzt HTTP/3 nicht mehr auf TCP als Übertragungsprotokoll, sondern auf QUIC welches wiederum auf UDP aufbaut. Wie der Name schon vermuten lässt, ist QUIC schneller als TCP. QUIC stellt ebenso TLS 1.3 als Mindestanforderung auf.

5http3-support

HTTP/3 verspricht umfassendere Verschlüsselung im Gegensatz zu HTTP/2 und schnelleren Verbindungsaufbau. HTTP/3 wird (Stand Ende 2022) von 75% der Webbrowser und 26% der Top 10 Millionen Webseiten unterstützt.

Breaking Changes

Wie in jeder Major Release Version gibt es auch mit .NET 7 Breaking Changes zu den Vorgängerversionen. Eine Vollständige Liste findet ihr hier. Microsoft ist sich dessen Problems bewusst und stellt einen Upgrade Assistant zur Verfügung, der Updates auf neue Versionen deutlich vereinfachen soll. Wie sinnvoll dieser Upgrade Assistant ist, wird sich wohl erst im Laufe der nächsten Monate zeigen, aber jede Erleichterung im Upgrade Dschungel ist gerne gesehen. Die Punkte sind nur relevant, wenn von einer früheren Version auf die aktuelle aktualisiert wird. Für Neuentwicklungen werden diese Änderungen automatisch berücksichtigt, da sich ansonsten die Anwendung nicht bauen lässt.

Eine vollständige Liste von Neuerungen und Änderungen findet ihr auf der offiziellen .NET Webseite.

Weiterfolgend können wir folgende Ressourcen empfehlen:
Offizielle .NET Webseite
.NET Plattform GitHub Seite
.NET MAUI GitHub Seite
.NET MAUI Microsoft Homepage
BenchmarkDotNet
Performance Improvements Microsoft Blog