6

thanks to the .NET evolution, today we have a lot of different frameworks and technologies. I'm very confused about the differences about it. What is the difference between:

  • .NET Framework
  • ASP.NET
  • .NET Core
  • ASP.NET Core
  • .NET Standard

?

  • looks like rather blatant duplicate of Relationship between C#, .NET, ASP, ASP.NET etc – gnat Jun 12 '17 at 17:32
  • 3
    That other question doesn't ask about the same things this question does. It can't, considering that they didn't even exist yet when this was written. – Jörg W Mittag Jun 12 '17 at 18:28
  • A lot is evolving in the .NET world - with Framework, Core & Standard. This obviously has a direct impact on ASP.NET land. This post and associated whitepaper should provide a broad overview of what's changing: telerik.com/blogs/… Thanks! – Sam Basu Jan 15 '18 at 14:45
20

.NET Framework

is a VM, a JIT compiler, an object memory system consisting of a memory allocator and a garbage collector, a loader, a linker, and a runtime system (collectively called the Common Language Runtime (CLR)) which executes and supports a language called Microsoft Intermediate Language (MSIL). It is also a class library called the Base Class Library (BCL) containing fundamental data structures (strings, arrays, linked lists, hash dictionaries, …) and abstractions thereof (lists, dictionaries, …) as well as other fundamental types (tasks, functions, abstractions for equality) and algorithms. It also comes with a wider range of libraries called the Framework Class Library (FCL) which has support for developing desktop applications (e.g. WinForms and WPF), data manipulation (LINQ) and lots of other things.

It is strictly a Windows-only, PC-only implementation. It is not Free Software or Open Source, although at least part of the source code is available under certain non-free non-open restrictive licenses; also a subset of the FCL is available as Reference Source under the MIT License.

It is largely monolithic, based on assemblies. The Framework must be installed at the target.

ASP.NET

is a web framework built on the .NET Framework, and thus is also strictly Windows-only; it is also deeply tied to Internet Information Server (IIS). It is also largely monolithic and based on assemblies. The Framework must be installed at the target.

.NET Core

is a VM, a JIT compiler, an object memory system consisting of a memory allocator and a garbage collector, a loader, a linker, and a runtime system (collectively called the CoreCLR) which executes and supports a language called Microsoft Intermediate Language (MSIL). It is also a class library called the Core Library containing fundamental data structures (strings, arrays, linked lists, hash dictionaries, …) and abstractions thereof (lists, dictionaries, …) as well as other fundamental types (tasks, functions, abstractions for equality) and algorithms. It also comes with a wider range of libraries called CoreFX which has support for developing desktop applications (UWP), data manipulation (LINQ) and lots of other things.

It is designed to be highly portable, and Microsoft itself develops, releases, maintains and supports fully equal ports (with fully equal support, fully equal functionality and simultaneous releases) for Windows, macOS, and Linux on AMD64, x86, and ARM.

It is highly modular, consisting of small NuGet packages that allow a "pay-as-you-go" style of development, paying (in the sense of memory, disk space, and maintenance) only for functionality that you actually use. The framework (or rather the parts of it that are used) is shipped with the app.

.NET Core is functionality-wise a subset of the .NET Framework, but not API-wise: even for functionality implemented in .NET Core, the API is not necessarily the same as the one in .NET Framework. This is most obvious in cases where .NET Framework is tightly tied to Windows and .NET Core instead has either an OS-independent alternative or multiple OS-native ones. Another obvious example is reflection, which is closely tied to the underlying runtime, which was completely rewritten for .NET Core.

So, a working .NET Core application does not automatically also work on .NET Framework, however since .NET Core is functionality-wise mostly a subset, there should be alternative APIs available that have the same functionality. The converse is not true: a working .NET Framework app can not necessarily be ported directly to .NET Core.

.NET Core is the future of .NET at Microsoft. It is going to replace all the different slightly incompatible independent implementations of .NET inside Microsoft.

ASP.NET Core

is a web framework for .NET Core, and thus is highly portable. It is also not tied to any specific web server. It is, in fact, not even tied to a specific .NET implementation, it also works on .NET Framework. It is functionality-wise a subset of ASP.NET, but not necessarily API-compatible.

It is highly modular, consisting of small NuGet packages that allow a "pay-as-you-go" style of development, paying (in the sense of memory, disk space, and maintenance) only for functionality that you actually use. The framework (or rather the parts of it that are used) is shipped with the app.

.NET Standard

is a common API specification for a common subset of APIs across .NET Framework, .NET Core, and Xamarin / Mono. Implementations supporting a specific version of .NET Standard can run all apps targeting that version (or a lower one), apps targeting a specific version of .NET Standard can run on all platforms implementing that version (or a higher one).

ISO CLI

There is also another (set of) standard(s) covering (parts of) the .NET ecosystem. Early on in the history of .NET, Microsoft submitted a set of standards to ECMA, and then on to ISO which cover a subset of .NET 2.0. These standards are called the *Common Language Infrastructure (CLI)*, and consist of the Common Intermediate Language (CIL) (a high-level bytecode language), the Virtual Execution System (VES) (an abstract machine for executing CIL), the Common Type System (CTS) and the Common Language Specification (CLS) (specifications covering types and APIs that both CLI implementations and language implementations on top of the CLI must provide, and restrictions they must obey in order for languages to be able to interoperate seamlessly), a language-independent specification of program Metadata (including e.g. debug data, again for language interop), and a Standard Library.

2

ASP.NET Core is a web framework, building on top of .NET Core.

.NET Core is a set of libraries and a runtime, with which you can build any type of application (and on which ASP.NET Core is built).

The two projects are related, but have different release schedules.


.NET Core and the .NET Framework are, at this time, different implementations of an API - called .NET Standard (it is a general purpose API, intended for cross platform development). Both are free to add to this API, but are required to adhere to it at least. Again - the standard is versioned, and a specific version of .NET Core and the .NET Framework are expected to adhere to a specific version of the standard.

  • What about Full .NET Framework? – Daniel Santos Jun 12 '17 at 14:17

protected by gnat Jan 15 '18 at 15:17

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.