Historically, “.NET Core” was just another framework in the family of .NET frameworks (.NET Framework, .NET Core, and Xamarin). But with the introduction of the “5th version”, Microsoft stated that since that time the .NET Core had become the main “implementation” of the .NET “development platform”. Practically, it means that Microsoft considers that .NET Core is for companies that really think about their future.
You may often want to compare .NET Core with .NET Framework while assessing the option of migrating your server application from the .NET Framework.
There’re some reasons behind this:
- Cross-platform requirements;
- Microservices requirements;
- Requirements to use Docker containers.
.NET Framework supports only Windows. You need .NET Core if it’s not enough for you to serve only Windows users with your application, and you don’t want to spend developers’ time creating and maintaining different code for different OS.
With .NET Core, you can run the same code not only on Windows but also on other platforms such as macOS, Linux, and Android.
The significant part of .NET Core is the ASP.NET Core web development framework for building high-performance cross-platform web apps or microservices, Internet of Things apps, and mobile backends. With ASP.NET Core, systems run with a much lower number of servers/Virtual Machines which leads to costs savings in infrastructure and hosting. ASP.NET Core is also faster than other popular web frameworks.
You don’t want to stop the whole application to find the cause of critical bugs. But with a “monolithic app” you have to. This is the most common disadvantage.
Besides, some parts of your “monolithic app” require dealing with changes in the business landscape more quickly than the rest of the app, so you want to break them into microservices to iterate on that differently.
The microservices design is also useful to reduce your cloud costs. Once deployed into the cloud, each microservice can be independently scaled.
Microsoft recommends using .NET Core if you're embracing a microservices-oriented system. You can use .NET Framework to develop microservices, but this will be too heavy and not cross-platform.
Requirements to use Docker containers
Development and deployment are like day and night. Your software may work on your developer’s computer but won’t work when you deploy it to the hosting environment to make it accessible for your clients. To eliminate the problem, Docker containers are actively used.
You can use Docker containers to simplify the deployment of your application onto a production web server, even dealing with .NET Framework. However, Microsoft suggests using Docker containers with .NET Core, especially when you employ microservices architectures
The following list of the premade Docker containers for .NET is provided.
Migrating the .NET Framework to .NET Core
Porting to .NET Core from .NET Framework for many projects is relatively straightforward. The key issue in migration is whether it can be done quickly or not, and what we must consider making the process as smooth as possible.
Some issues can make the process longer and more expensive.
- Moving to ASP.NET Core from ASP.NET requires more work because app models are required to rewrite due to their legacy state;
- Some APIs and dependencies as part of your application may not work with .NET Core because they relied on Windows-specific technology, so you'll have to either find other platform-specific versions or make your code generic enough to run on all platforms. Otherwise, your whole app won’t work;
- Several technologies aren't available for use with .NET Core, such as app domains, remoting, and code access security. If your code relies on them, you need to spend time considering particular approaches.
Our example of Successful Migration to .NET Core
Our Client is a Healthcare Technology company from the USA. They provide a customized EHR solution to healthcare organizations worldwide.
Historically, the client used the .NET Framework, which allowed them to serve only Windows users. Their software didn’t work on macOS. So they decided to migrate to .NET Core.
Our migration process was established as follows:
- Creating a .NET development team. We provided the client with three potential developers, from whom he could choose.
- Preparing for migration. We checked the dependencies in .NET Framework that should have been transferred after migrating to .NET Core. This process is necessary in order to avoid such problems in the future as failure to access certain files and incompatibility with 3rd-party apps, libraries, and tools. A list of technologies, libraries, and files that were not supported by .NET Core and required upgrade was prepared.
- Upgrading dependencies.
- Refactoring, including database optimization and API modernization.
- Frontend migration from AngularJS to Angular 2+.
.NET development team migrated the backend of the EHR software to .NET core and the frontend to Angular 2+. Now the client enlarges its customer base with macOS users. You can see this case in detail.
Expected Results after Migration to .NET Core
Thomas Ardal, the founder, and developer behind elmah.io (error logging and uptime monitoring service for .NET software) shares his experience after migrating 25+ projects to .NET Core:
“Migrating has been an overall great decision for us. We see a lot of advantages already. Simpler framework. Faster build times. Razor compilation way faster. … Better throughput on Azure and less resource consumption (primarily memory). The possibility to move hosting to Linux. And much more”.