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)
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 Datenvalidierungsattribute, 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)
Stand: 08.12.2025
Es ist für uns eine Selbstverständlichkeit, dass wir verantwortungsvoll mit Ihren personenbezogenen Daten umgehen. Sofern wir personenbezogene Daten von Ihnen erheben, verarbeiten wir diese unter Beachtung der geltenden Datenschutzvorschriften. Detaillierte Informationen finden Sie in unserer Datenschutzerklärung.
Einwilligung in die Verwendung von Daten zu Werbezwecken
Ich bin damit einverstanden, dass die Vogel IT-Medien GmbH, Max-Josef-Metzger-Straße 21, 86157 Augsburg, einschließlich aller mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen (im weiteren: Vogel Communications Group) meine E-Mail-Adresse für die Zusendung von Newslettern und Werbung nutzt. Auflistungen der jeweils zugehörigen Unternehmen können hier abgerufen werden.
Der Newsletterinhalt erstreckt sich dabei auf Produkte und Dienstleistungen aller zuvor genannten Unternehmen, darunter beispielsweise Fachzeitschriften und Fachbücher, Veranstaltungen und Messen sowie veranstaltungsbezogene Produkte und Dienstleistungen, Print- und Digital-Mediaangebote und Services wie weitere (redaktionelle) Newsletter, Gewinnspiele, Lead-Kampagnen, Marktforschung im Online- und Offline-Bereich, fachspezifische Webportale und E-Learning-Angebote. Wenn auch meine persönliche Telefonnummer erhoben wurde, darf diese für die Unterbreitung von Angeboten der vorgenannten Produkte und Dienstleistungen der vorgenannten Unternehmen und Marktforschung genutzt werden.
Meine Einwilligung umfasst zudem die Verarbeitung meiner E-Mail-Adresse und Telefonnummer für den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern wie z.B. LinkedIN, Google und Meta. Hierfür darf die Vogel Communications Group die genannten Daten gehasht an Werbepartner übermitteln, die diese Daten dann nutzen, um feststellen zu können, ob ich ebenfalls Mitglied auf den besagten Werbepartnerportalen bin. Die Vogel Communications Group nutzt diese Funktion zu Zwecken des Retargeting (Upselling, Crossselling und Kundenbindung), der Generierung von sog. Lookalike Audiences zur Neukundengewinnung und als Ausschlussgrundlage für laufende Werbekampagnen. Weitere Informationen kann ich dem Abschnitt „Datenabgleich zu Marketingzwecken“ in der Datenschutzerklärung entnehmen.
Falls ich im Internet auf Portalen der Vogel Communications Group einschließlich deren mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen geschützte Inhalte abrufe, muss ich mich mit weiteren Daten für den Zugang zu diesen Inhalten registrieren. Im Gegenzug für diesen gebührenlosen Zugang zu redaktionellen Inhalten dürfen meine Daten im Sinne dieser Einwilligung für die hier genannten Zwecke verwendet werden. Dies gilt nicht für den Datenabgleich zu Marketingzwecken.
Recht auf Widerruf
Mir ist bewusst, dass ich diese Einwilligung jederzeit für die Zukunft widerrufen kann. Durch meinen Widerruf wird die Rechtmäßigkeit der aufgrund meiner Einwilligung bis zum Widerruf erfolgten Verarbeitung nicht berührt. Um meinen Widerruf zu erklären, kann ich als eine Möglichkeit das unter https://contact.vogel.de abrufbare Kontaktformular nutzen. Sofern ich einzelne von mir abonnierte Newsletter nicht mehr erhalten möchte, kann ich darüber hinaus auch den am Ende eines Newsletters eingebundenen Abmeldelink anklicken. Weitere Informationen zu meinem Widerrufsrecht und dessen Ausübung sowie zu den Folgen meines Widerrufs finde ich in der Datenschutzerklärung.