.NET 8 und C# 12 verfügbar Visual Studio, VS Code und das C# Dev Kit

Von Thomas Joos 5 min Lesedauer

Visual Studio und Visual Studio Code integrieren.NET 8 und C# 12. Hierfür sind aber mindestens Visual Studio 2022 Version 17.8, das VS-Code-Pendant oder das C# Dev Kit vonnöten. Mehr zu den Neuerungen verrät dieser Beitrag.

Das Kompilieren von .NET-Anwendungen in nativen Code soll weniger Speicherplatz benötigen und umgehend starten, verspricht Microsoft. (Bild:  Microsoft)
Das Kompilieren von .NET-Anwendungen in nativen Code soll weniger Speicherplatz benötigen und umgehend starten, verspricht Microsoft.
(Bild: Microsoft)

Seit Ende November stehen .NET 8 und C# 12 zur Verfügung. Um davon zu profitieren, sind die eingangs genannten Voraussetzungen zu erfüllen. Beim Verwenden von C# mit Visual Studio Code ist die CSharp-Erweiterung für Visual Studionotwendig

In bereits existierenden Projekten muss das „TargetFramework“ auf .NET 8.0 gesetzt werden (<TargetFramework>net8.0</TargetFramework>). Der AOT-, sprich Ahead-of-time-Compiler ist in .NET 8 auch für macOS verfügbar. Außerdem kann dieser jetzt auch Worker Services, gRPC und WebAPIs kompilieren.

Ein zeitnaher Wechsel zu .NET 8 ergibt durchaus Sinn, weil der offizielle Support von .NET 7.0 im Mai 2024 endet. Dagegen bekommt .NET 8 einen dreijährigen Long-Term-Support (LTS) bis November 2027. Die letzte LTS-Version .NET 6.x wird noch bis zum November 2024 unterstützt.

Mehr Performance und einfachere Syntax

Microsoft verspricht schon alleine durch die Verwendung von .NET 8 eine höhere Performance. Durch den Einsatz von C# 12 vereinfacht sich außerdem die Syntax. Mengen lassen sich in C# einfacher initialisieren und zuweisen. Die optionalen Lambda-Parameter sind ebenfalls neu.

Wer bereits existierende Projekten mit .NET 8 weiterentwickeln will, muss den Code allerdings auf Kompatibilität überprüfen. Es gibt einige Änderungen in den Kernbibliotheken und bei Windows-Forms. Die größten Änderungen erfordern im Programm-Code oder im SDK Anpassungen am eigenen Code. Die Breaking Changes von .NET 8 finden sich auch in der Microsoft-Dokumentation.

Microsoft hat .NET 8 zusammen mit C# 12 veröffentlicht. Es ist daher angeraten, diese Kombination in der aktuellen Version von Visual Studio 2022 oder Visual Studio Code einzusetzen. In .NET 8 wurden Primärkonstruktoren eingeführt, die teils eine Zeitlang in C# 6 gab. Dadurch ist es jetzt möglich, Parameterlisten hinter den Typnamen zu schreiben oder auch mit Klassendefinitionen zu nutzen. Die wichtigsten Neuerungen von .NET 8 sind:

  • .NET Aspire: Ein „Cloud-ready“, produktionsbereiter Stack mit Observability-Funktionen für verteilte Anwendungen, der über NuGet-Pakete geliefert wird.
  • Verbesserungen in der Serialisierung: .NET 8 bringt viele Verbesserungen in der System.Text.Json-Serialisierung und Deserialisierung. Zum Beispiel ist jetzt das Deserialisieren auf schreibgeschützte Felder oder Eigenschaften möglich. Dies ermöglicht eine flexiblere Datenbindung, besonders bei der Verwendung von Mustern, die Unveränderlichkeit bevorzugen.:
Public class Example
  public string ReadOnlyProperty { get; }
}
var json = "{\"ReadOnlyProperty\":\"Wert\"}";
var obj = JsonSerializer.Deserialize<Example>(json);
Console.WriteLine(obj.ReadOnlyProperty); // Gibt "Wert" aus
  • Erweiterungen des Quellgenerators: Der System.Text.Json Quellgenerator in .NET 8 wurde verbessert, um die Native AOT-Erfahrung mit dem reflexionsbasierten Serialisierer gleichzustellen.
  • Unterstützung für Interface-Hierarchien: Ermöglicht das Serialisieren von Eigenschaften aus Interface-Hierarchien.
  • Neue Benennungsrichtlinien: JsonNamingPolicy umfasst neue Richtlinien für snake_case und kebab-case Eigenschaftsnamen.
  • Zeitabstraktion: Die neue TimeProvider Klasse und das ITimer Interface ermöglichen es, Zeit in Testumgebungen zu simulieren.
  • Unterstützung für zusätzliche Typen: Der Serialisierer unterstützt jetzt zusätzliche Typen wie Half, Int128, UInt128, Memory<T> und ReadOnlyMemory<T>. Diese Erweiterung ermöglicht die Verwendung einer breiteren Palette numerischer Typen in .NET-Anwendungen, besonders nützlich für High-Performance Computing:
var data = new { HalfValue = Half.MaxValue, Int128Value = Int128.MaxValue };
var serialized = JsonSerializer.Serialize(data);
Console.WriteLine(serialized);
  • Methoden zur Arbeit mit Zufälligkeit: Die Typen System.Random und System.Security.Cryptography.RandomNumberGenerator führen neue Methoden ein, um zufällig eine bestimmte Anzahl von Elementen aus einer Eingabemenge auszuwählen.
  • Leistungsorientierte Typen: Neue Typen im System.Collections.Frozen Namespace wie FrozenDictionary<TKey,TValue> und FrozenSet<T>, die keine Änderungen an Schlüsseln und Werten zulassen, ermöglichen schnellere Leseoperationen.
  • Verbesserungen in System.Numerics und System.Runtime.Intrinsics: Vector256<T>, Matrix3x2 und Matrix4x4 haben verbesserte Hardwarebeschleunigung in .NET 8.
  • Datenvalidierung: Das System.ComponentModel.DataAnnotations Namespace enthält neue Daten­vali­dierungs­attri­bute, die für Cloud-native Dienste konzipiert sind.
  • Neue APIs für Metriken: Ermöglichen das Anhängen von Schlüssel-Wert-Paar-Tags an Meter und Instrument Objekte bei deren Erstellung.
  • Unterstützung für SHA-3 Hashing-Primitive: SHA-3 wird jetzt unterstützt und ist verfügbar für Hashing, HMAC, konfigurierbare Hash-Algorithmen und RSA OAEP-Verschlüsselung.
  • Unterstützung für HTTPS-Proxy: HttpClient unterstützt jetzt HTTPS-Proxy, der einen verschlüsselten Kanal zwischen dem Client und dem Proxy erstellt.

Neuerungen bei Blazor – Static-Server-Rendering

Bisher konnten Entwickler bei Webanwendungen auf Blazor Server und Blazor WebAssembly zurückgreifen. Beide Varianten hat Vor- und leider auch Nachteile. Daher haben sich Entwickler oft dazu entschieden Webanwendungen mit beiden Architekturen zu erstellen. In .NET 8 lassen sich beide Architekturen jetzt in einer gemeinsamen Webanwendung zu integrieren.

Der Rendering-Modus lässt sich dabei so einstellen, dass eine Webanwendung mit dem Blazor Server gerendert wird. Sobald die Dateien der WebAssembly geladen sind, kann die Webanwendung im Browser gerendert werden. Neben Single-Page-Applikationen können jetzt auch Multi-Page-Anwendungen auf dem Server gerendert werden. Dazu kommt als Abgrenzung zum Blazor Server das Static-Server-Rendering (SSR) zum Einsatz, das zur Laufzeit rendert.

Einige Neuerungen von C# 12

In C# 12 hat Microsoft neue Features eingeführt, die den Umgang mit der Sprache vereinfachen. Zu den hervorzuhebenden Neuerungen gehören, neben den bereits erwähnten „Primären Konstruktoren“, die eine vereinfachte Klassendefinition ermöglichen, noch „Sammlungsausdrücke“, welche die Arbeit mit Sammlungen effizienter gestalten. Zum Beispiel ist es möglich, eine Person-Klasse wie folgt zu definieren:

public class Person(string Name, int Age);

Dadurch wird die Notwendigkeit einer separaten Konstruktor-Definition eliminiert, was die Klarheit und Kompaktheit des Codes erhöht. Im Falle von Sammlungsausdrücken lässt sich ein Integer-Array wie folgt initialisieren:

int[] numbers = [1, 2, 3, 4, 5];

Diese Syntax vereinfacht das Erstellen von Sammlungen und verbessert die Lesbarkeit des Codes. Wie erwähnt ermöglicht C# 12 auch die Deserialisierung auf schreibgeschützte Felder und Eigenschaften. Das bedeutet, dass nun auch Eigenschaften ohne set-Accessor deserialisiert werden können. Dies erweist sich als nützlich, wenn Unveränderlichkeit in Datenmodellen bevorzugt wird.

„Inline-Arrays“ bieten eine kompaktere Syntax für Array-Initialisierungen. Die Unterstützung von „optionalen Parametern in Lambda-Ausdrücken“ erweitert die Flexibilität bei der Verwendung von Lambda-Funktionen. Sogenannte „ref readonly“-Parameter wiederum verbessern die Performance bei der Übergabe von großen Datenstrukturen. Weiterhin gibt es einen „Alias für beliebigen Typ“ und ein „Experimentelles Attribut“ sowie „Interceptors“.

(ID:49852465)

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu RZ- und Server-Technik

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung. Die Einwilligungserklärung bezieht sich u. a. auf die Zusendung von redaktionellen Newslettern per E-Mail und auf den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern (z. B. LinkedIn, Google, Meta).

Aufklappen für Details zu Ihrer Einwilligung