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
?
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:
?
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.
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.
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.
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.
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).
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.
You can use same .Net standard dll in the projects of type .Net Core and .Net Framework. .NET Standard is the best way to add cross-platform support to a .NET library. .NET Standard is a specification of .NET APIs that are available on all .NET implementations. Targeting .NET Standard lets you produce libraries that are constrained to use APIs that are in a given version of .NET Standard, which means it's usable by all platforms that implement that version of the .NET Standard. You can check out this link : https://docs.microsoft.com/en-us/dotnet/standard/library-guidance/cross-platform-targeting
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.