ASP.NET Core 1.0 – jetzt auf allen Plattformen?

13. April 2016

ASP.NET Core 1.0, der noch im Entstehen befindliche Nachfolger von ASP.NET 4.x, ist ebenso modular, quelloffen und betriebssystemübergreifend wie das neue .NET Core. Was bringt uns das neue ASP.NET und wird es uns demnächst ermöglichen, auch auf Linux und OS X lauffähige Websites zu entwickeln wie bisher für Windows?

Einleitung
In meinem vorherigen Artikel gab ich einen Überblick über .NET Core 1.0 – Microsofts neue, wenngleich noch unfertige, plattform- und betriebssystemübergreifende Technologie, die womöglich in der Zukunft das herkömmliche, nur auf Windows lauffähige .NET Framework ersetzen wird. Dies betrifft allerdings auch alle auf dem Core aufbauenden Frameworks, die entweder ebenso neu entwickelt oder nach .NET Core portiert werden müssen.

ASP.NET Core 1.0
ASP.NET Core 1.0 ist eines der ersten Frameworks, die auf Core aufbauen, welches analog zu .NET Core die neueste Version der ASP.NET-Familie darstellt und ebenso noch in Entwicklung ist. Es ist ebenfalls modular aufgebaut (Komponenten per NuGet beziehbar), quelloffen, plattform- und betriebssystemübergreifend verfügbar.

Neuerungen und Unterschiede zum Vorgänger
Zwar unterstützt ASP.NET Core 1.0 MVC- und WebAPI-Projektvorlagen, doch deren Implementierung unterscheidet sich von ASP.NET 4.6. Im neuen ASP.NET wurden nämlich die einst unterschiedlichen Controller-Implementierungen – ApiController (Web API 2) aus dem System.Web.Http- und Controller (MVC 5) aus dem System.Web.Mvc-Namespace – in einen Controller (MVC 6) vereint. Die Unterstützung für SignalR und Web Pages wurde bereits angekündigt. Dies lässt sich allerdings nicht für WebForms sagen. Es ist durchaus vorstellbar, dass diese Technologie überhaupt nicht nach ASP.NET Core 1.0 portiert werden wird.

In der neusten Version hat sich auch die Projektstruktur geändert. Manche Dateien wurden fallengelassen und neue eingeführt, welche die bisherigen Information und Logik in kleineren, auf den konkreten Konfigurationszweck fokussierten Dateien enthalten. Des Weiteren hat Microsoft gänzlich auf XML als Format für Konfigurationsdateien verzichtet und ist an seiner Stelle auf JSON umgestiegen. Der Grund für diese Strukturänderungen war, dass bislang zu viel Konfiguration über „web.config“ und „packages.config“ sowie die Projektdatei selbst stattfand.

ASP.NET Core 1.0 verwendet standardmäßig seinen eigenen, eine minimale Funktionalität aufweisenden Dependency Injection Container, welcher aber nicht andere Container ersetzen soll. Bisher gibt es noch keinen passenden Bootstrapper für Unity, weswegen sich man sich bisweilen nach einem anderen Container (z.B. AutoFac) umschauen muss, sofern die Funktionalität des von Hause mitgelieferten DI-Containers nicht ausreicht.

Das Beste aus beiden Welten
Obwohl der Name „Core“ dies suggeriert, gilt nicht zwangsläufig, dass man .NET Core in Kombination mit ASP.NET Core verwenden muss. Wenn man in ASP.NET Core 1.0 entwickelt, kann man nämlich für beide Laufzeitumgebungen gleichzeitig entwickeln – sowohl für das „alte“ .NET Framework als auch für .NET Core (siehe Abbildung 1).

Abbildung 1 – Auswahlmöglichkeiten der Laufzeitumgebung für ASP.NET Core 1.0 und ASP.NET 4.6 [2]

Falls die bisher nach .NET Core 1.0 portierte Funktionalität nicht ausreichen oder manche Programmbibliotheken nicht mit .NET Core kompatibel sein sollten, kann man in den Projekteinstellungen aus den zu unterstützenden Frameworks einfach .NET Core entfernen und weiterhin nur für .NET Framework 4.6 entwickeln. Im Endeffekt hat man also das vollständige .NET Framework zur Verfügung und kann trotzdem ASP.NET Core 1.0 Anwendungen schreiben.

Core oder Nicht-Core – das ist hier die Frage
Laut Scott Hanselman [2] sollte man bei der Wahl des zu verwendenden ASP.NET-Frameworks bedenken, dass es sich bei ASP.NET 4.6 um die ausgereiftere Plattform handelt, da praxiserprobt und bereits heute verfügbar. Von ASP.NET Core 1.0 dagegen gibt es gerade mal das erste Release, das bis jetzt lediglich Web API und MVC-Projekte unterstützt. Obwohl ASP.NET Core 1.0 den Beginn eines neuen Kapitels darstellt, wird ASP.NET 4.6 bis auf Weiteres voll unterstützt und auch weiterentwickelt.

In einem nachfolgenden Artikel werde ich diese Kernfrage noch im Kontext eines Portierungsversuchs unserer hauseigenen Web API detaillierter beleuchten.

Fazit
Im Zusammenspiel mit dem betriebssystemübergreifenden .NET Core 1.0 versucht Microsoft, ASP.NET Core 1.0 auch auf Linux und OS X verfügbar zu machen. Das neue ASP.NET kennt keine Unterscheidung zwischen Web API- und MVC-Controllern mehr und basiert nur noch auf MVC 6. Es kann auch auf dem vollständigen, „alten“ .NET Framework laufen, welches mehr Funktionalität bietet, praxiserprobt und voll ausgereift ist. Man kann deshalb ohne Weiteres auch ASP.NET 4.6 weiterhin verwenden.

Referenzen

1. http://docs.asp.net/en/latest/conceptual-overview/understanding-aspnet5-apps.html
2. http://www.hanselman.com/blog/ASPNET5IsDeadIntroducingASPNETCore10AndNETCore10.aspx