Launched in 2002 .Net framework has been one of the popular development platform for building enterprise apps and with Microsoft’s backing it had the stability and maturity which made it an instant hit. Over the years it has been forked into many subsets to target specific platforms like Mono for Linux, .Net Compact, Windows Phone for mobile, Silverlight for Web UI and many more, although this has worked well but with the advent of Mobile, IOT, Cloud and likes the list of disparate platforms to support has been growing.
All these forks of .Net Framework have caused a lot of fragmentation which causes sharing code across diff subsets difficult, also .Net framework being a machine wide install and a prerequisite in most scenarios has its challenges on the newer platforms. Not always will you have the permissions to install or update the existing .Net framework, disk size can be an issue on some of the platforms to install the full .Net Platform.
In most cases applications running on these platforms will always be using a very small subset of whats available in .Net framework so if a small essential subset along with the runtime can be packaged with the application itself the deployment becomes so much simpler and with small size and possibly memory footprint.
.Net Core and .Net Standard are Microsoft’s solution to the above stated problems.
Released in 2016 .Net Core is a cross platform implementation of .net framework with support for web and console apps across Linux, Mac and Windows. Any libraries needed in addition to the Core itself can be pulled via nuget. There is no need for core to be pre-installed on the target machine, everything that’s needed to run the application can be included in the build output.
Just this feature makes .Net Core preferred choice for building my future .Net apps as I can run my apps targeting anything from .Net Core 1.0, 2.0 or any other version in future and they all can run on the same machine without having to worry about the framework version installed or whether upgrade is needed or not.
.Net Core has smaller footprint in terms of memory and build size making it easier to download over devices with limited storage space specially in IOT based solutions, also since being open source makes it a great choice not just for big enterprise but for everyone since its already Cross Platform.
Coming to .Net Standard its a specification of .Net API’s created with the intention to help share code across different .Net platforms. Every .Net implementation whichever platform its meant for targets a specific version of .Net Standard which helps the developer in writing code which can run across platforms e.g. if I am trying to build a DLL which is meant to be consumed across .Net Framework 4.6.1, .Net Core 1.0 and Mono 4.6 then my DLL should be build targeting .Net Standard 1.3 and this will ensure it runs smoothly across all the required platforms. Microsoft has published this simplified table to help decide the .Net Standard version to choose.
Lastly I would say that with .Net Core and .Net Standard Microsoft has hit the nail on its head and we should see .Net getting even more popular over the years with adoption increasing among Open Source community also and with Azure doing so great there is so much to learn and build 🙂
I will try and share some sample .Net Core apps i am planning to work on soon.