Why choose .NET Core?

.NET Core

Twelve years since the first .NET framework release, developers ended up with several, fragmented version of .NET for various platforms. From .NET Compact Framework to Windows Phone, Framework to Silverlight and Windows Store apps, each time, Microsoft has taken .NET to a new platform. Supposedly the common language runtime ended up with a varying subset: every time, there is a different runtime, application model and framework with various development done at every layer and APIs which go back to a common code base but have not always remained in common.


Indeed, various platforms always will have different capabilities and features, but as .NET becomes open source and spreads beyond the platforms that Microsoft controls, having a common core instead of a set of subsets that are loosely coupled gets even more important. That is the basic for .NET Core and the open source strategy of .NET.


The .NET framework core is mscorlib that has Windows-centric features such as App Domains and remoting. This means that each time .NET goes to a new platform, it requires a new core. Add the fact that the framework on every new platform is created and maintained by a different team, with its own shipping and version at various times, one gets plenty of divergences. The portable class libraries began to push the platforms closer together but with varying code bases, the same thing are implemented many times.

The combination of the need to build .NET in a more modular and agile way and not wanting to implement the same thing a lot of times when it could be just written once explains why .NET Core stack appears the way it does. .NET Core has a new runtime, CoreCLR that got the just-in-time compiler and the type system, VM, garbage collection as well as other run-time pieces. That is the same level as Mono runtime or .NET Native runtime. Above are the Base Class Libraries from NuGet, such as immutable collections. And, above that is the application model, such as ASP.NET, that bootstraps the CoreCLR and also adds features such as dynamic compilation and NuGet resolution.


The technology of .NET Core makes sense for a cross-platform environment. Thus, this is a strategy by Microsoft that developers should pay attention to. Some of the more pessimistic feedback about the plans tends to underestimate the changes scope or assume a sort of idealized past when .NET has created as a more modular cross-platform stack all along. .NET Core is the Mono componentized version of the full framework that developers work on with Mono. It would in time turn as a de facto cross-platform implementation for stacks.


MODULARITY. NuGet packages became the standard method of adding new functionality to apps. Since Visual Studio 2010, developers used the Package Manager Console and NuGet Package Manager for installing and configuring libraries and frameworks. Now this has been extended to include the core ASP.NET features. The developer could pick and choose which features of ASP.NET to include in the solutions. This opt-in model enables developers to be more deliberate when it comes to which libraries are included in the projects.


All .NET Core 1.0 packages could be found at the GitHub site. Microsoft and the developer community embraced the open source software transparency. All projects are updated actively by both contributors of Microsoft and the community at large. This approach allows a quicker development cycle as well as continuous code enhancement.


In previous versions, WEB API and MVC were based on various versions of the framework. At a minimum, the differences in namespace organization, concepts and classes led to confusion. For instance, the base class controllers were in a different namespace compared to the common result interface for controller actions. This was resolved by .NET Core 1.0 MVC with a single set of objects within one namespace. This is a standardized approach that simplifies the development of both MVC and WEB.API endpoints.


.NET Core 1.0 would run on the current .NET framework but designed to use the new .NET Core 1.0. When .NET Core is targeted, the code of the framework would be packaged with the deployed application. This .NET version has been ported to perform on Linux and OSX. Furthermore, this extends the .NET development usability beyond the Windows platforms. If developers want to work in Linux or OSX, Microsoft developed Visual Studio Code that allows a user to develop on any of the platforms.

The modular design of .NET Core, updated programming language, and productivity enhancements are sure to make the framework popular with software developers.