Build 2017: Microsoft stellt Version 2.0 der .NET-Core-Produkte vor
Parallel zu den Preview-Versionen von .NET Core 2.0, ASP.NET Core 2.0 und Entity Framework Core 2.0 gibt es Patches für die 1er-Serie der Core-Produkte.
- Dr. Holger Schwichtenberg
Im Rahmen der diesjährigen Entwicklerkonferenz Build 2017 in Seattle hat Microsoft eine erste Vorschau auf die zweite Hauptversion seiner Core-Produkte und parallel die Patches 1.0.5 und 1.1.2 für die bestehenden Versionen veröffentlicht.
Die erste Hauptversionen der Core-Produkte waren im Juni 2016 erschienen. Seitdem gab es eine funktionale Erweiterung unter der Versionsnummer 1.1 und mehrere kleinere Releases mit Fehlerbehebungen. Die Version 2.0 stellt nun einen größeren funktionalen Sprung dar, der gemäß der Definition des Semantic Versioning auch mit Breaking Changes einhergehen kann und tatsächlich geht: ASP.NET Core 2.0 läuft nur noch auf .NET Core 2.0. Die bisher vorhandene Unterstützung für das klassische .NET Framework 4.x als Basis hat Microsoft fallen lassen – zum Ärger vieler Entwickler. In den Release Notes zu ASP.NET Cor[e] 2.0 findet sich leider kein Hinweis darauf. Die Änderung gilt wohl nicht für Entity Framework 2.0, das sich in einem ersten Schnelltest problemlos auf .NET Framework 4.7 betreiben lies.
Standardklassen von .NET
Die größte Erweiterung in .NET Core 2.0 ist die Realisierung des .NET Standard 2.0. Microsofts ursprünglicher Plan war, in .NET Core 1.x bewusst zahlreiche Klassen und Klassenmitglieder wegzulassen, um die Klassenbibliotheken zu verschlanken und alte Techniken zu beerdigen. Dieses in .NET Core 1.x auch umgesetzte Konzept erschwerte aber die Migration von .NET Framework 4.x zu .NET Core 1.x, weshalb Microsoft mit .NET Standard 2.0 eine Liste von einigen tausend Klassen definierte, die .NET Core einschließlich der Windows Universal Platform für Windows und auch Xamarin aus dem .NET Framework bekommen sollen.
.NET Standard ist ein Vertrag, den eine .NET-Implementierung eingeht und zusichert, dass sie alle in der Version des Standards definierten Klassen implementiert. .NET Framework 4.7, .NET Core 2.0 und zukünftig auch Xamarin sind eine Obermenge über .NET 2.0, die über den Standard hinaus weitere Klassen anbieten. Eine .NET-Standard-Assembly lässt sich in allen .NET-Varianten referenzieren, die den Standard in der entsprechenden oder einer höheren Version umsetzen. Die bisherigen Portable Class Libraries, von denen es viele Varianten gab, werden damit obsolet.
Auch wenn Microsoft beim .NET-Standard 2.0 den Werbeslogan "One library ro rule them all" verwendet, umfassen die darin enthaltenen Klassen keineswegs die gesamte Klassenbibliothek des .NET-Frameworks, die in .NET 4.6.x beziehungsweise 4.7 rund 13.500 Klassen stark ist, sondern nur einen ausgewählten Teil davon. Insbesondere sind keine GUI-Komponenten wie WPF oder Windows Forms enthalten.
.NET Core läuft nun auch in Windows auf ARM32- und ARM64-Prozessoren. Der neue .NET Store bietet einen zentralen Speicherplatz für Assemblies, die in mehreren Anwendungen verwendet werden und nicht in die Anwendungsinstallationsverzeichnisse sollen. Er ist die Nachfolger des Global Assembly Cache im klassischen .NET Framework.
Microsoft liefert im .NET-Core-2.0-Setup nun die Pakete für ASP.NET Core 2.0 und Entity Framework Core 2.0 direkt mit. In den 1.x-Versionen waren diese getrennt von NuGet zu beziehen. Mit dem Paket Microsoft.AspNetCore.All stellt Microsoft ein neues Meta-Paket bereit, das alle verfügbaren ASP.NET-Core- und Entity-Framework-Core-Assemblies auf einmal referenziert. Allerdings bedeutet das die Abkehr von dem Gedanken, dass Core-basierte Software nur die wirklich benötigten Assemblies referenzieren sollten.
ASP.NET Core bietet neben Performanceverbesserungen nun eine Unterstützung für die C#-7.0-Syntax in Views sowie als "Razor Pages" bezeichnete Views, die ohne Controller auskommen. Views können nun vorkompiliert werden – Microsoft hatte das in den Beta-Varianten für Version 1.0 bereits integriert, dann aber wieder ausgebaut. Schließlich gibt es verbesserte Diagnosemöglichkeiten für in Azure gehostete ASP.NET Core-Webanwendungen.
Eigenwillige Prioritäten bei Entity Framework Core
Die Preview-Version von Entity Framework Core 2.0 erhält einige neue Features wie globale Datenfilter, die in der Kontextklasse definierbar sind und auf alle Abfragen einschließlich Eager Loading-Befehlen wirken. Das ist ein Feature, das nicht einmal der Vorgänger Entity Framework 6.x besitzt. Das ist insofern bemerkenswert, als Microsoft in der Roadmap erkannt hat, dass einige als "Critical" und "High Priority" markierte Punkte aus Entity Framework 6.x in Entity Framework Core noch fehlen, Microsoft sich in Version 2.0 aber nicht auf die eigene Prioritätenliste gestürzt hat, sondern andere Features realisiert hat, die nicht auf der Liste stehen.
Microsoft hat in manchen Situationen die Übersetzung von LINQ zu SQL verbessert und führt nun einige Befehle in der Datenbank statt im RAM aus (vgl. Release Notes zu Entity Framework Core 2.0). In einem ersten Test hat Entity Framework Core 2.0 im Gegensatz zur 1.1-Version tatsächlich nun Abfragen mit ToString().Contains() und AddDays() korrekt in SQL übersetzt. Leider gilt das nicht für den wichtigen Operator GroupBy, der weiterhin alle Datensätze ins RAM lädt, um sie dort zu gruppieren, was in der Praxis häufig nicht akzeptabel ist. Auch die LINQ-Operation Union() führt Entity Framework Core weiterhin im RAM aus.
RTM-Version im 3. Quartal
Zum Testen von ASP.NET Core 2.0 empfiehlt sich die Installation der Preview-Version von Visual Studio[ }15.3. Für Entity Framework Core 2.0 genügen auch ältere Visual-Studio-Versionen für diejenigen, die nicht auf .NET Core, sondern auf dem klassischen Visual Studio aufsetzen. Die fertigen Versionen von .NET Core, ASP.NET Core und Entity Framework Core 2.0 sollen laut der Roadmap im dritten Quartal 2017 erscheinen.
[Update 11.5. 08:15]
Offensichtlich hat Microsoft auf die Kritik der Entwickler reagiert, wie an einem Blogbeitrag auf MSDN erkennbar ist. Das Team will sicherstellen, dass es keine Probleme beim Upgrade von ASP .NET Core 1.0 auf Version 2 geben wird. (rme)