.NET Core 1.0 launched in 2016 as a cross-platform, open-source re-implementation of .NET. The initial releases were performance-focused and intentionally lean. .NET Core 2.0, released in 2017, broadened the API surface significantly. .NET Core 2.1, the LTS release from May 2018, is what most production .NET Core workloads run on in early 2019.
The performance numbers, including TechEmpower benchmark results and ASP.NET Core startup time, demonstrate that .NET Core is a genuine high-performance platform, not a diminished port.
For example, the TechEmpower benchmark results show .NET Core outperforming Node.js and Go in many cases, with .NET Core 2.1 achieving over 7,000 requests per second on a simple JSON serialization test, while Node.js 12 achieved around 5,500 requests per second. This performance difference is significant and can lead to cost savings in terms of infrastructure and resource utilization.
.NET Framework 4.7.2 and the recently released 4.8 are still where most enterprise .NET code runs. Windows-only, tightly coupled to IIS and the Windows runtime, and carrying 18 years of API surface.
The migration from .NET Framework to .NET Core is real work: not all APIs are available, Windows-specific dependencies like COM interop, Windows Authentication, and some Reporting Services components require attention, and the IIS-to-Kestrel mental model shift takes adjustment. In my experience, this migration can take anywhere from a few months to several years, depending on the complexity of the application and the number of dependencies that need to be updated or replaced. For instance, I worked on a project where we had to migrate a large e-commerce application from .NET Framework 4.6 to .NET Core 2.1, which took around 6 months and required significant updates to our database access layer and authentication mechanisms.
For large organisations, the migration is measured in years, not weeks. I have seen cases where the migration process took over 2 years, involving multiple teams and requiring significant investment in training and resources. Tools like the .NET Portability Analyzer can help identify potential issues and dependencies that need to be addressed during the migration process.
Microsoft has committed to a single .NET platform: .NET 5, announced for November 2020, will be the unification of .NET Core and .NET Framework. The naming, .NET 5, not .NET Core 5 or .NET Framework 5, is deliberate - one platform, one name, going forward.
The trade-off between adopting the latest .NET Core version and staying on a stable, long-term support release like .NET Core 2.1 LTS is a common dilemma. While .NET Core 3.0 will bring exciting new features like desktop application support, it may not be the best choice for production workloads that require stability and predictability. In such cases, sticking with .NET Core 2.1 LTS and using tools like Azure DevOps to manage the application lifecycle can provide a more stable and maintainable solution.
The Xamarin cross-platform mobile stack will be folded into MAUI. This consolidation addresses the fragmentation that has made the .NET ecosystem confusing to outsiders and migration-planning difficult for insiders. With MAUI, developers will be able to use a single framework to target multiple platforms, including iOS, Android, and Windows, which can simplify the development process and reduce the complexity of maintaining multiple codebases.
For a new project starting in 2019, .NET Core 2.1 LTS is the production-ready choice for web APIs, microservices, and command-line tools. When choosing a framework, it's also important to consider the tooling and ecosystem support, such as the availability of NuGet packages, Visual Studio extensions, and community resources. For example, the .NET Core 2.1 LTS release includes support for popular frameworks like Entity Framework Core and ASP.NET Core, which can simplify the development process and provide a more comprehensive set of features.
.NET Core 3.0, set to release in September 2019, will bring desktop application support, including WPF and Windows Forms. This release will also include significant updates to the .NET Core runtime and framework, which can provide improved performance and reliability for desktop applications.
If your project requires .NET Framework-specific capabilities, like heavy WCF server, MSCOM interop, or some legacy ASP.NET HttpModules, stay on .NET Framework for now and plan a migration. If not, .NET Core is the forward-looking platform.