Erstellt man in Visual Studio 2015 eine neue Web Application mit ASP.NET 5 RC1 und darin eine neue Class Library als (NuGet) Package, so staunt man beim Blick in die project.json nicht schlecht: in der Sektion „frameworks“, welche die Target-Frameworks des Projekts aufführt, ist ein Eintrag für „dotnet5.4“ enthalten:
dotnet5.4? Als Entwickler könnte man denken: „Mein Gott, gestern habe ich gerade erst .NET 4.5 eingesetzt und jetzt sind wir schon bei .NET 5.4?. Warum habe ich nie etwas von .NET 5.1-5.3 gehört und von .NET 5 auch nur im Zusammenhang mit ASP.NET 5 und .NET Core 5?“
So schlimm ist es zum Glück nicht… Denn „dotnet5.4“ gibt in diesem Zusammenhang kein „echtes“ Framework an, gegen das eine Kompilierung ausgeführt wird. Es ist vielmehr ein „Platform Moniker“, also eine Art Alias für ein übergeordnetes Konzept, dem .NET Platform Standard. Im Endeffekt ist „dotnet5.4“ nur (mal wieder) ein verwirrender Microsoft-Begriff 😉
Doch was ist der .NET Platform Standard? Mit diesem Konzept wird es ermöglicht, mittels eines Alias-Namens mehrere .NET-Plattformen (Windows 8.1, Windows Phone, UWP, Silverlight, volles .NET, …) von seiner Bibliothek aus zu unterstützen. Verschiedene Versionen dieses Standards geben dabei an, welche Plattformen durch das Kompilat unterstützt werden. Die gebotene .NET-Funktionalität entspricht dabei prinzipiell der Schnittmenge der Plattformen. „netstandard1.0“ umfasst z.B. die größtmögliche Menge an .NET-Plattformen, die gebotene Funktionalität ist allerdings gering. „netstandard1.4“ bietet die größtmögliche Funktionalität, hier werden jedoch nur die Plattformen .NET 4.6.x DNX Core und Mono/Xamarin Platforms unterstützt. Die von jeder Standard-Version unterstützten Plattformen lassen sich dabei als Matrix darstellen (Quelle):
Dieses Konzept des „.NET Platform Standards“ ist somit eine konsequente Erweiterung der PCL (Portable Class Libraries) und der dort vorhandenen Profile, wobei sich diese PCL-Profile auch auf den .NET Platform Standard mappen lassen. Der .NET Platform Standard ist in sich nicht abgeschlossen. Sollten zukünftig weitere Plattformen hinzukommen, so werden die Versionen erweitert…
Was ist nun „dotnet5.4“? Im Prinzip entspricht es dem „netstandard1.3“. Genauso wie „dotnet5.3“ als Platform Moniker dem „netstandard1.2“ entspricht usw.. Jemand bei Microsoft kam auf die glorreiche Idee, dass „dotnet5.4“ ein guter Name wäre, um Entwickler vollkommen zu verwirren. Mission accomplished! Aber dabei bitte auch gleich die Versionsnummern komplett durcheinanderwerfen… Aber Abhilfe ist in Sicht: mit ASP.NET 5 RC2 soll das Namens-Dilemma behoben werden, wahrscheinlich wird sich dann „netstandard“ direkt als Moniker verwenden lassen.