Since the late 1990’s Microsoft began developing .NET, the framework that became a central part of software development for enterprises around the world. However, the .NET framework was proprietary and was developed to create applications for the Windows platform. Those factors, for a variety of reasons, presented limitations for software developers.
Then in 2014, Microsoft unveiled .NET Core in an apparent effort to address those issues. The company describes .NET Core as a general-purpose, modular, cross-platform and open source implementation of .NET. It includes a runtime, framework libraries, compilers and tools that support a variety of chip and operating system targets. These components can be used together or separately in device, cloud and embedded/IoT scenarios. And .NET Core is maintained by Microsoft and the .NET community on the open-source gateway GitHub.com.
“Other frameworks were leveraging open source communities to advance their platforms more quickly. This was more or less Microsoft’s answer, so they could try to quickly put out a platform that was more agnostic” said Nick Kaczmarek, TDK .NET Developer. “A large majority of the code for .NET Core is on GitHub. All the documentation is there as well. So, you can interact with it.”
Key Features of .NET Core
Microsoft calls .NET Core “…a blazing fast, lightweight and modular platform for creating web applications and services that run on Windows, Linux and MacOS.” Early performance benchmarks vary widely. But a Microsoft case study reported the Raygun cloud-based error-and-crash-reporting platform increased throughput by 2,000 percent, going from 1,000 requests per second per node with Node.js to 20,000 requests per second with .NET Core, using the same sized server.
“This was a complete from the ground up re-write to be more competitive with a lot of the other frameworks out there that are blazing fast,” said Mark Henman, TDK Chief Technology Officer. “It's going to take time to mature. And as it matures, it’s going to find the niches where it works best. There will be places where it won’t be the best solution. But that’s true for any language or any framework.”
Kaczmarek noted that .NET Core is becoming more stable and is emerging as a viable programming option with the following features:
- Flexible deployment: .NET Core can be included in applications, side-by-side user or machine-wide.
- Framework Dependent Deployment: Typical method used with the framework already on the machine.
- Self-contained Deployment: All libraries and the .NET runtime are included in the application, ensuring the target system can run the app.
- Cross-platform: Runs on Windows, macOS and Linux
- It can be ported to other operating systems.
- The supported operating systems, CPUs and application scenarios will grow over time, provided by Microsoft, other companies, and individuals.
- Command-line tools: All product scenarios can be exercised at the command-line.
- Compatible: .NET Core is compatible with .NET Framework, Xamarin and Mono, via the .NET Standard.
- Open source: The .NET Core platform is open source, using MIT and Apache 2 licenses. Documentation is licensed under CC-BY. .NET Core is a .NET Foundation project.
- Supported by Microsoft: .NET Core is supported by Microsoft, per .NET Core Support
When to Choose .NET Core
.NET Core has been called primarily a tool to build new applications that run as part of cloud workloads or microservices that are part of larger enterprise systems. An article on when to use .NET Core noted that although .NET Core has many features found on the rest of the .NET platform, it’s focused on delivering console-based server applications.
“The development experience is just fantastic. The language is easy to pick up,” Kaczmarek said. “If you are developing an application today, you should probably consider using .NET Core.”
Here is a summary of conditions favorable to considering .NET Core.
- You have cross-platform needs.
- If the goal is to have an application (web/service) run across platforms (Windows, Linux and macOS), the best choice is to use .NET Core.
- You are targeting microservices.
- .NET Core is lightweight and its API surface can be minimized to the scope of the microservice.
- A microservices architecture also allows you to mix technologies across a service boundary, enabling a gradual embrace of .NET Core for new microservices that live in conjunction with other microservices or services developed with .NET Framework, Java, Ruby, or other monolithic technologies.
- You are using Docker containers.
- The modularity and lightweight nature of .NET Core makes it perfect for containers.
- Containers are commonly used in conjunction with a microservices architecture, although they can also be used to containerize web apps or services which follow any architectural pattern.
- Docker containers can be hosted on Linux or Windows infrastructure or use a cloud service (such as Azure Container Service which can manage, orchestrate and scale your container-based application in the cloud).
- You need high performance and scalable systems.
- When your system needs the best possible performance and scalability, .NET Core and ASP.NET Core are your best options.
- ASP.NET Core outperforms ASP.NET by a factor of 10, and it leads other popular industry technologies for microservices such as Java servlets, Go and node.js.
- With ASP.NET Core you’d be able to run your system with a much lower number of servers/VMs, ultimately saving costs in infrastructure and hosting.
- You need side-by-side of .NET versions by application.
- Easy side-by-side installation of different versions of .NET Core on the same machine allows you to have multiple services on the same server, each of them on its own version of .NET Core, eliminating risks and saving money in application upgrades and IT operations.
“If it stays on the path it could advance very well, pick up some stability, pick up some documentation and it might be usable within companies. Companies could be making decisions between, for example node Angular framework, a Core system or some hybrid of the two. We sometimes run into Angular front-ends with the service architecture on the back. There’s nothing that could prevent using Core’s high speed and ability to help the Angular front end move even quicker,” said Nick Zabenco, TDK Technologies .Net Team Lead.
When to Use the .NET Framework
While .NET Core offers significant benefits for new applications and application patterns, the .NET Framework will continue to be the natural choice for many existing scenarios and as such, it won’t be replaced by .NET Core for all server applications. Development scenarios that target cloud, mobile or cross-platform situations favor considering .NET Core. Large-scale applications leaning on large portions of the .NET ecosystem would suggest using the .NET framework instead.
“When people think of .NET, they think of the .NET framework, the large and pretty powerful framework that ties things to Windows. .NET Core can run on top of that, which can give you some comfort if you are in that arena. But you are still tied to Windows in that scenario,” Kaczmarek said.
Here are some situations to use the .NET Framework instead of .NET Core:
- Your application currently uses .NET Framework
- In most cases, you won’t need to migrate your existing applications to .NET Core.
- Instead, a recommended approach is to use .NET Core as you extend an existing application, such as writing a new web service in ASP.NET Core.
- You need to use third-party .NET libraries or NuGet packages not available for .NET Core.
- Libraries are quickly embracing .NET Standard, which enables sharing code across all .NET flavors including .NET Core.
- With .NET Standard 2.0 this will be even easier, as the .NET Core API surface will become significantly bigger and .NET Core applications can directly use existing .NET Framework libraries.
- This transition won’t be immediate, though, so we recommend checking the specific libraries required by your application before deciding one way or another.
- You need to use .NET technologies that are not available for .NET Core.
- Some .NET Framework technologies are not available in .NET Core. Some of them will be available in later .NET Core releases, but others don’t apply to the new application patterns targeted by .NET Core and may never be available.
- You need to use a platform that doesn’t support .NET Core.
- For example, some Azure services such as Service Fabric Stateful Reliable Services and Service Fabric Reliable Actors require .NET Framework.
- Some other services provide an SDK not yet available for consumption on .NET Core. This is a transitional circumstance, as all of Azure services use .NET Core.
- In the meantime, you can always use the equivalent REST API instead of the client SDK.
“Each language, as it develops, will find its own sweet-spot. It will be interesting to see with .NET Core where that will be; where it will fit,” Henman said.