Friday, January 16, 2015

.NET Core and friends

With all the hullabaloo around .NET Core, I thought I'd dig in, try it out and see what all the fuss is.

It's taken a bit of effort to cut through the hype and get to the meat of what it is, and what it is expected to be.  Here's the no-nonsense version, based on a few hours of experimentation:

What .NET Core is today:

* A modularized .NET framework whose libraries are acquired through NuGet
* The newest way to do your ASP.NET apps
* A gateway to using .NET Native, for machine-compiled code instead of JIT
* An adoption by MS of many Mono sources and open source in general for .NET

What .NET Core is also today, 

but might/should be categorized under a different name depending where you read:

* A new project file structure focusing on "kproj" and Project.json
* Aforementioned new structure facilitates targeting any combination of multiple .NET frameworks within one project file (yes!)
* A way to do very nifty console apps which demonstrate the power of above multitargeting, with zero relation to ASP.NET or .NET Native

What .NET Core isn't, today:

* A fully functional replacement for current mature .NET Frameworks.  .NET Core is missing many support libraries, such as System.Transaction
* A Client-friendly entity.  No WPF for .NET Core yet, based on what I read.

What .NET Core promises to be in the future:

* The foundation for all upcoming .NET Frameworks
* A unifying force bringing together things like .NET CF, Silverlight, Windows 8 API, etc.
* Cross platform to Linux, Mac OS as well as Windows

What .NET Core promises to be today, but I can't figure the @#$! out:

* A way to build "regular" .NET projects as well, but referencing "regular" .NET Framework libs (like System.Transaction... or any of the others) is darned mysterious
* Can utilize PCL and SHPROJ projects.  Can't find a way to make SHPROJ works

Thoughts

I'm damned excited.  Multitargeting within the confines of csproj files is a disaster area, and SHPROJ helps a lot, but it's still just awful with the way packages.config and repositories.config all collide with each other.  The .NET Core revamped project structure promises to solve all that