July 19th, 2021 | by Paweł Łukasiewicz

.NET Core vs. .NET Framework - Which is a Better Choice for Your Next App?

Table of contents

With the evolution of the .NET platform, entrepreneurs and startups looking to build a new application may be confused about whether they should choose between .NET Core vs. .NET Framework variants. This choice depends largely on the operating system the new application will target, but there are several other factors to consider before making the final decision.

In this article, we explain the difference between the .NET Core and the .NET Framework – the two variants of the .NET platform and everything you need to know to make the right decision when picking between these two. In particular, we look at:

  • The components of the .NET platform
  • .NET Core vs. .NET Framework – similarities and differences
  • When to use .NET Core?
  • When not to use .NET Core?
  • When to use .NET Framework?
  • When not to use .NET Framework?

Let’s start with a quick overview of the .NET platform and its components.

The .NET Platform explained

Today, Microsoft offers .NET 7 – a unified development platform that covers the full range of application development spectrum, from desktop and mobile apps to IoT and AI solutions.

Back in 2002, Microsoft released the first version of the .NET Framework. It offered one application building platform serviced by most programming languages, including C#, F#, and Visual Basic. The platform was created to run exclusively on Windows and offers convenient features like a common API set, language independence, and interoperability with the underlying operating system.

.NET Core was first introduced in 2016 to address the limitations of the .NET Framework, namely the fact that it targeted Windows applications only. This newer component of the .NET platform can run on Windows, macOS, and Linux. In 2016 also, Microsoft acquired Xamarin to offer an environment dedicated to mobile application development as part of the .NET Framework.

While the introduction of .NET Core was a much-needed step, it further complicated the library portability for developers. For that reason, Microsoft introduced the .NET Standard – a formal specification of .NET APIs (there is a specific .NET Standard version for every .NET implementation).

Finally, to eliminate further confusion, Microsoft released .NET 5 in November 2020, aiming to unify all of its components under a single platform. It offers a common set of APIs that run on Windows, Linux, Mac, iOS, and Android. That doesn’t mean however that .NET Framework and .NET Core will cease to exist. .NET Framework will not receive further updates, but Microsoft will continue to support it.

.NET – A unified platform


.NET 7 is the newest version of the platform (released in 2022), which delivers important changes while still continuing the legacy of .NET 5.

.NET Core vs. .NET Framework – similarities and differences

Both .NET Core and .NET Framework maintain a vast user base. The 2020 Stack Overflow survey indicated that both .NET Framework and .NET Core continue to be among the leading software development platforms for various applications.

What do these programming frameworks have in common? Both can share codes and many components upon request, making them convenient to use. Developers can use .NET Framework and .NET Core runtimes to build applications and libraries in C#, F#, and VB.NET.

At the same time, there are significant differences between .NET Core and .NET Framework that must be considered before choosing a .NET development framework for your next project. Take a look at the table below for a quick overview:


.NET Core vs. .NET Framework – comparison

As a system, .NET Core is installed differently, it’s not part of the OS. .NET Core is composed of NuGet packages and is either compiled directly into an application or placed in a folder inside the app. .NET Core is all about decoupling the system from Windows to allow apps to run side by side on the machine.

The release of .NET Core gave businesses greater flexibility in terms of adding resources to servers and expanding the infrastructure, allowing them to easily support more users quickly when needed. These points explain why .NET Core is the second most popular development framework, right after Node.JS. There is no other platform on the market, however, that offers as much flexibility and portability as .NET Core.

In addition, .NET Core is more cost-effective. It offers more choice for IDEs and other tools required for developing this technology: you have multiple hosting options, freedom to switch to Linux or other providers, unlimited database storage options. Even if costs aren’t the issue in your project, it’s better to have the additional financial capacity.

Learn more: How to build stable and reliable software with a .NET development company

When to use .NET Core?

.NET Core, the ‘younger brother’ of the .NET Framework, was created to address specific needs that the primary .NET Framework didn’t offer. These include:

Cross-platform integration

There was a growing need in the software development community for a cross-platform solution, so Microsoft had to respond accordingly by releasing .NET Core. The platform can use Windows, macOS and Linux, and other platforms as development workstations, giving developers the flexibility of creating applications that can run on multiple operating systems. Microsoft continues to expand the list of supported platforms. Developers can use the command line on every platform on that list and benefit from Visual Studio when using Windows and macOS (in a limited capacity). There’s also the cross-platform Visual Studio Code which supports Windows, Linux, and macOS.

Building microservices

.NET Core is designed to support a service-oriented architecture or software applications composed of small, modular business services. Each of these services typically runs a unique process created in different programming applications and is deployed independently. This is a great feature that allows owners to scale their tools by adding new microservices whenever needed. .NET Core also allows to mix development technologies and can be minimized for each microservice.

Using docker containers

Microservices usually come along with docker containers. .NET Core works very well with this type of architecture because it’s lightweight and modular. It also enables cross-platform deployment straight to dockers. You can also use the .NET Framework for containers, but the image size will be significantly larger.

CLI control

.NET Core offers CLI control across all supported platforms, which is particularly attractive for developers who prefer to work in lightweight editors with the CLI function. In addition, .NET requires minimum installation on development platforms and offers the option of switching to an Integrated Development Environment (e.g. Visual Studio IDE) for an added convenience.


Microsoft recommends using .NET Core with ASP.NET Core when you have long-term plans for your tool and anticipate a scale-up. This combination offers the best performance and an opportunity to scale easily. It allows developers to implement hundreds of microservices, using a lower number of servers and virtual machines. This efficiency translates into a better user experience and significant cost savings.

Running multiple .NET versions side-by-side

.NET Core is the only option when installing applications with dependencies on different versions of the .NET development framework. The advantage is that with .NET Core, these are run on the same server, with multiple services running simultaneously.

When not to use .NET Core?

When comparing .NET Core vs. .NET Framework, we should note that .NET Core does not support some of the libraries and extensions that .NET Core does. There are a few situations in which it would be better to opt for .NET Framework instead of .NET Core (this may change in the future as Microsoft continues to develop the development platform). Consider the following scenarios:

  • When you want to use Windows Forms and WPF applications – these aren’t currently supported by .NET Core, which means you’d still have to use .NET Framework to make a desktop app for macOS.
  • When you need to use WebForms – ASP.NET WebForms don’t actually exist, but Microsoft doesn’t plan to port them to ASP.NET Core either.
  • When you need to create a WCF service – .NET Core does not support this kind of service. As an alternative, you’d have to make a REST API with ASP.NET Core MVC.
  • You need a class library that uses an unsupported .NET Framework API – such cases exist and create compatibility issues. .NET Core 2.0 bridges a lot of those libraries; not all of them are covered yet. You can check the list of unsupported technologies here.
  • You need access to Windows APIs. .NET Core is designed to be moved away from the OS, so WMI, Windows Registry, and other Windows-specific APIs won’t work with it.
  • You need full support for VB.NET and F#. Both Microsoft and the community work to solve this issue, but it hasn’t been solved just yet.

When to choose .NET Framework?

Windows comes with the .NET Framework. Its principal role is to build Windows desktop apps and large-scale enterprise applications. It uses .NET workflow and data connection tools and can use Docker and Windows Containers.

You should choose .NET Framework over .NET Core in the following cases:

  • When you are building an app to run on Windows alone. That’s what this platform was designed for, so there’s no point in complicating things.
  • When you’re working on an app that already uses .NET Framework. You could migrate, but extending the application is a better option. Developers can, for instance, code a new web service in ASP .NET Core.
  • When you need to use third-party libraries or NuGet packages that .NET Core doesn’t cover. The latter may be growing in popularity, but it’s not yet fully compatible with all .NET Framework libraries, so know which ones you need to use before deciding between .NET Core and .NET Framework.
  • When .NET Core isn’t supported. Not all Microsoft and third-party platforms support .NET Core; some of Azure’s services still don’t.

Learn more: Why do we love .NET at CSHARK?

When not to use .NET Framework

There are several scenarios in which .NET Framework is not the best choice for your next digital tool. Opt for .NET Core specifically when:

  • you’re building an app intended for cross-platform use,
  • you plan to scale your app in the future and thus require high performance from your development platform,
  • you think you’d like to experiment or try new things (.NET Framework isn’t open source and thus won’t allow you to seek advice from experts and more experienced users when developers come across a problem they can’t solve on their own),
  • .NET Core works – the platform is a bit more stable and offers better performance, which is always advantageous,
  • you need open-source technology.

.NET Core vs. .NET Framework – which should you choose?

Both .NET Core and .NET Framework are among the top, globally recognized development frameworks, so when you have to choose between these two, in particular, you’re off for a good start. When deciding between .NET Core and .NET Framework, we suggest taking a look at the criteria listed below.

.NET Framework will be a better choice when:

  • you’re building an application to run on Windows only,
  • your team already works on a .NET project and doesn’t have time to learn new technology,
  • developers are adding new functionalities to existing apps,
  • you do not want to deal with continuous upgrades and changes,
  • you’re building Windows client applications using Windows Forms or WPF,
  • you’re building user interface-centric Web applications.

In turn, .NET Core is a better choice if:

  • you want to create a cross-platform solution targeting Windows, Linux, and macOS,
  • you aren’t afraid of learning new things,
  • you need to meet tight release schedules,
  • flexibility is your top priority,
  • your budget isn’t as flexible,
  • you want to benefit from open-source technologies.

Read next:

Paweł Łukasiewicz

Senior .NET Developer / Blogger. On a daily basis, focused on cloud development. In my spare time, I am writing articles on various technology topics touching full-stack development lifecycle.