There have been many exciting changes in the .NET world as of late which will have huge implications for MS development ecosystem. It all starts with .NET Core, which is a subset of the .NET Framework. It is open-source with contributions from more than 10k developers and supports multiple applications models and has a smaller footprint from being able to add only the needed dependencies – as well as a smaller memory footprint.
It’s true that .NET Core is booming but, the .NET Framework is not going anywhere either. There are two distinct .NET flavors right now- the .NET Core, the new one and the .NET Framework, the classic one.
The .NET Family
The .NET ecosystem has three major high-level components- the .NET Framework, the .NET Core and Xamarin.
The .NET framework works on windows and web applications. Now, as you see in the above diagram -you can use the Windows Forms, UWP, WPF to create windows applications in the .NET framework. ASP.NET MVC is used to build Web applications in the .NET framework.
Meanwhile, .NET Core is the new open-source and cross-platform framework to create applications for all OS including Mac, Linux and Windows. .NET Core supports ASP.NET Core and UWP only. UWP is used to build Windows 10 targets Windows and mobile applications. Meanwhile, SP.NET Core is used for building browser-based web applications.
Xamarin, on the other hand, is undebatable- when you need to build mobile apps (Android, iOS, Windows mobile) using C#- Xamarin is the only option.
The Big Difference
.NET Core and the .NET framework, for the most part, have a subset-superset relationship. .NET Core is called “core” because it contains all the core features of the .NET Framework- both the runtime and framework libraries. For e.g. they share the JIT, GC and types such as List and String.
The fundamental purpose of .NET Core was so that .NET could be open source, cross-platform and be used in more resource-constrained environments.
.NET Framework allows building applications for a single platform- Windows. .NET Core, however, is cross-platform and supports three different operating systems, they are OS X, Windows and Linux. Therefore, if you need to create an app (web/service) that has the cross-platform capability then you should choose .NET Core as its runtime (CoreCLR) and libraries are cross-platform.
The best development experience happens (in regards to using .NET Core across platforms) on Windows with the Video Studio IDE. With it, you can use various productivity features like source control, project management, refactoring, debugging, rich editing (also comprises Intellisense), testing and more.
Rich development, however, is also supported using Visual Studio on Mac Linux, Windows including Intellisense and debugging. Third party editors such as Sublime and VI function and get editor Intellisense via the open source Omnisharp project.
Unlike .NET Framework which requires being installed as a single package and runtime environment for Windows, the .NET Core, however, is cross-platform and needs to be packaged and installed independently of the underlying OS. The developers have to compile the Nuget packages included in .NET Core. Furthermore, developers can collect the Nuget packages directly into the application or they can choose the other option of placing them in a folder inside the application.
As a formal condition of .NET APIs, the .NET Standard Library ticks off all the requirements for diverse runtimes and preserves the consistency in the .NET ecosystem. Every version of the .NET Framework utilizes a specific version of the .NET Standard Library.
For e.g. .NET Framework 4.6 used .NET Standard Library 1.3, meanwhile, .NET Framework 4.6 2 used 1.5 version of the .NET Standard Library. .NET Core, however, implements .NET Standard library 1.6.
.NET Framework was released as a licensed, proprietary software framework. Then, Microsoft made specific components of the .NET Framework open-source. The company also released .NET Core as an open source software framework. Therefore, both individual and enterprise developers can develop apps with .NET Core without spending much on licensing fees.
Microservices allows various technologies across a service boundary. The diverse mix of technologies gradually allows .NET Core for new microservices that work with other microservices or services. E.g., you can blend microservices or services developed with .NET Framework, Ruby, Java or other monolithic technologies.
.NET Core, unlike .NET Framework, makes it easier for developers to build microservice oriented systems quickly. As such systems comprise of independent and dynamic microservices, the developers have to focus on individual microservices.
The application model of .NET Framework includes Windows Forms, ASP.NET, and Windows Presentation Foundation (WPF).
On the other hand, the application model of the .NET Core also includes ASP.NET Core and Windows Universal Apps.
.NET Core, unlike .NET Framework, is made with features to simplify the development and deployment of the cloud-based application.
The developers can utilize ASP.NET to build a variation of cloud-based applications quickly. Plus, they can publish the applications directly to the cloud by availing the cloud-ready configuration included in the ASP.NET Core.
Modular Collection of Libraries
Even though both allow developers to benefit from the robust class libraries, .NET Core uses a re-designed common language runtime called CoreCLR and features a modular collection of libraries called CoreFX. Hereafter, the developers have the option of picking and using the libraries needed by each application and improve the application’s performance by eliminating unneeded libraries.
Performance and Scalability
.NET Core is more effective than .NET Framework to improve the performance scalability of applications. It allows the developers to enhance the performance of applications radically without deploying additional infrastructure or hardware.
Plus, it allows developers to create, test and deploy apps directly in the cloud. Thus, the developers can opt to .NET Core to improve the performance and scalability of their applications without investing in too much effort/time.
Containers are generally used in concurrence with a microservices architecture. Furthermore, they can also be utilized to containerize web apps or services that follow any architectural pattern. Although, .NET Framework can be used on Windows containers. Meanwhile, the modularity and lightweight characteristics of .NET Core makes it a better option for containers.
Microsoft writes “When creating and deploying a container, the size of its image is much smaller with .NET Core than with .NET Framework. Because it’s cross-platform, you can deploy server apps to Linux Docker containers, for example”.
Docker containers can be hosted in your own Windows or Linux infrastructure, or in a cloud service like the Azure Container Service. It can manage, arrange and scale container-based applications in the cloud.