Die .NET Conf hat am 23.09. begonnen und mit ihr wurde .NET Core 3.0 unter General Availability veröffentlicht. Welche Änderungen bringt .NET Core 3.0 mit, wieso sollte man sich damit beschäftigen und was hat sich noch alles im .NET-Ökosystem verändert? Das wollen wir im Zuge dieser Mini-Blogserie erklären.
Mit .NET Core stellt Microsoft eine Cross-Plattform und Open-Source Runtime für .NET-Anwendungen zur Verfügung. Während das .NET Framework hauptsächlich für Windows gedacht war, ist .NET Core, welches 2016 zum ersten Mal veröffentlicht wurde, für den Einsatz auf beliebigen Plattformen gedacht (siehe Abbildung 1). Dabei ist .NET Core keine Alternative zum .NET Framework, sondern soll langfristig das .NET Framework für jede Art von Applikationen auf jeder Art von Plattform ablösen und mit .NET Core 3.0 ist man diesem Ziel einen großen Schritt näher gekommen.
Abbildung 1: .NET – Your platform for building anything
Welche Neuerungen bringt .NET Core 3.0?
Neben Anpassungen an der Performance, einer Optimierung des Speicherverbrauchs des Garbage Collectors und mehr Basis-Typen (siehe .NET Standard 2.1), die jetzt verwendet werden können, liegt der Fokus auf folgenden neuen Features:
- WPF und Windows Forms Support
- Side-by-side Support und Self-contained EXEs
- C# 8 und F# 4.7
Mit WPF und Windows Forms Support schließt sich eine Lücke, die aktuell noch Desktop-Applikationen davon abgehalten hat, auf .NET Core zu portieren. Mit .NET Core 3.0 werden jetzt sowohl WPF als auch Windows Forms für Windows unterstützt. Beide Frameworks sind mittlerweile auch als Open-Source auf GitHub verfügbar und somit offen für die Community, diese selber weiterzuentwickeln. Zusätzlich gibt es auch noch weitere Funktionalitäten für Windows Native Interop. Während bereits in .NET Core 1.0 P/Invoke möglich war, können jetzt auch WinRT, CoCreate COM APIs und Managed COM Components aus .NET Core angesprochen werden.
Der Side-by-Side Support ermöglicht es, mehrere Versionen von .NET Core gleichzeitig für unterschiedliche Anwendungen zu verwenden. Durch Self-contained EXEs gibt es nun nicht nur die Möglichkeit für Framework-dependent Deployments .NET Core Anwendungen als EXE-Datei nativ auszuliefern, sondern auch alle Abhängigkeiten inklusive der .NET Core Runtime in die EXE-Datei zu bündeln. Dadurch ergibt sich am Ende eine einzelne EXE-Datei, die direkt auf entsprechenden Plattformen ausgeführt werden kann. Durch den neuen Linker Support werden zusätzlich auch alle nicht benötigten APIs entfernt, sodass eine möglichst kleine Datei entsteht.
Viele der Neuerungen von C# 8 und F# 4.7 werden nur durch .NET Core 3.0 unterstützt, da hier Anpassungen an der Runtime notwendig waren. Freuen kann man sich auf neue Features wie z.B. Async Streams, Range/Index, Nullable Reference Types und Default Interface Members. Näheres zu den neuen Features folgt in einem späteren Blogbeitrag.
Während .NET Core 3.0 von sich aus viele Neuerungen mitbringt, wurden parallel auch viele Technologien mit auf den neusten Stand gebracht. Dazu zählen unter anderem ASP.NET Core 3, Entity Framework Core 3 und Blazor. Näheres zu den neuen Versionen der einzelnen Technologien folgt in späteren Blogbeiträgen.
Zusätzlich stellt die neue Runtime Version auch noch zwei weitere Technologien bereit: System.Text.Json und gRPC. Der System.Text.Json Namespace stellt eine hochperformante JSON-API zum Serialisieren und Deserialisieren von JSON bereit, ohne dass auf NuGet-Pakete wie Newtonsoft.Json ausgewichen werden muss. Mit gRPC wird ein neues System für Remote Procedure Calls über HTTP/2 bereitgestellt, vergleichbar mit Remoting und WCF. Mehr Informationen zu beiden Themen gibt es in späteren Blogbeiträgen.
Wer auf .NET Core 3.0 wechseln möchte, sollte sich vielleicht noch etwas gedulden. Die Version läuft nicht unter Long Term Support, wodurch diese maximal bis Ende Februar 2020 unterstützt wird, und könnte durchaus noch die eine oder andere Macke haben. Im November wird mit .NET Core 3.1 dann die Long Term Support Version veröffentlicht, die gemäß den offiziellen Support Policies für drei Jahr bis Ende 2022 von Microsoft unterstützt wird.
Was passiert mit dem .NET Framework?
Mit dem .NET Framework 4.8 hat Microsoft die letzte Major Version des .NET Frameworks veröffentlicht. Ab jetzt gibt es dafür keine weiteren Major-Updates mehr. Doch kein Grund zur Panik, denn das .NET Framework wird weiterhin unterstützt und wird auch weiterhin mit Windows ausgeliefert. Das bedeutet, dass es nicht nötig ist, bestehende .NET-Anwendungen auf .NET Core zu portieren. Neue Anwendungen hingegen, sollten direkt mit .NET Core entwickelt werden.
.NET Framework-Anwendungen die ASP.NET Web Forms, ASP.NET MVC, WCF, Windows Workflow, Remoting, App Domains oder Code Access Security im Einsatz haben, sollten ebenfalls auf dem .NET Framework bleiben, denn für diese Technologien wird es keine Unterstützung in .NET Core geben.
Wie werden .NET Framework-Anwendungen nach .NET Core portiert?
Wer seine Anwendungen vom .NET Framework auf .NET Core portieren möchte, kann dies relativ einfach tun. Eine Anleitung hierfür stellt Microsoft hier bereit. Über den .NET Portability Analyzer kann festgestellt werden, welche APIs die eigene Applikation verwendet und ob diese in .NET Core bzw. .NET Standard zur Verfügung stehen. Gibt es eine Übereinstimmung, müssen die Projekte “nur” in das neue csproj-Format überführt werden. Wer Windows-spezifische APIs verwendet, kann über das Windows Compatibility Pack die fehlenden Funktionalitäten einbinden.
Sprechen Sie uns an, wenn auch Sie Fragen zu Themen rund um .NET Core haben oder Hilfe bei Portierung Ihrer Anwendung nach .NET Core 3.0 in Ihrem Unternehmen benötigen. Wir führen Sie gerne ans Ziel.