Is .NET Core an "Implementation" of .NET Standard?
The other answers are great and cover the how, but I think the key to really understanding .NET Standard is the why.
What is .NET Standard actually for?
The purpose of .NET Standard is to allow developers to write their library and general purpose code in such a way that it can then be used by any applications they write, no matter which platform the application using that code targets (web, desktop, mobile, service etc.).
This is needed because .NET has forked and evolved into many flavours (principally full .NET Framework, .NET Core and Xamarin). Currently, if you want to write some code that encapsulates for example, some key business logic, and then use that code in both the desktop app, the mobile app and the website then that is difficult to achieve.
Write once, run anywhere
The idea of .NET Standard is that if you write your code to target just the APIs in .NET Standard, then it should work on any platform that has a version of .NET installed that implements the .NET Standard.
You don't write your whole app in .NET Standard, because you will still need platform or .NET version specific features (such as windows forms control libraries, Xamarin forms controls, file system access, web security, etc.), but if you write your library code to target .NET Standard you'll know that it can be easily shared between different apps on different platforms and that it should work on those platforms if they have a .NET Standard implementing version of .NET installed.
The ["Why do we need a standard?" section of this MSDN blog by Immo Landewerth][1] covers this well.
- Yes, .NET Core is a platform / runtime that implements a version of .NET Standard.
If you build a library that targets a version of .NET Standard, it can be used on any runtime that implements this or a higher version of .NET Standard. This applies to .NET Core as well as mono (=> Xamarin), UWP (.NET Native) and .NET Framework.
The detail of distribution doesn't really matter.. technically .NET Core < 2.0 relies on the way
NETStandard.Library
is built but that is changing for 2.0.ASP.NET Core is "just" a set of libraries and tooling atop a version of .NET Standard (pre 2.0 also a version of .NET Framework) that it requires to run on. This means you can build ASP.NET Core applications for both .NET Core and .NET Framework - potentially even other runtimes if they support the required level of .NET Standard.
For new projects, it makes sense to evaluate what your needs are. .NET Core has a different servicing policy than .NET Framework and .NET Framework still has components and API that aren't going to be included in .NET Core - for example WinForms and WPF.
For new library projects, it makes sense to target .NET Standard instead of .NET Framework wherever possible to ensure reusability in more types of projects.
Simple answer is yes:
.NET Core implements the .NET Standard Library, and therefore supports .NET Standard Libraries.
And ASP.NET Core built on .NET Core.
But: this does not mean that all ASP.NET Core apps support .NET Standard. ASP.NET Core apps can run on .NET Core or on the full .NET Framework. If an app has the full .NET Framework as a target platform it may have dependencies on libraries, that don't support .NET Standard.
My understanding is that the .NET Core
is implementing the .NET Standard
.
So .NET Standard
is more like a specification and .NET Core
is an actual framework which implements that specification.
.NET Standard
is also implemented by other frameworks like as .NET Framework
or Xamarin
(and ASP.NET Core
which is built on the top of .NET Core
).
Here is offficial explanation:
How is .NET Standard different from .NET Core?
.NET Standard is a specification that covers which APIs a .NET platform has to implement.
.NET Core is a concrete .NET platform and implements the .NET Standard.
.NET Standard:
The .NET Standard is a formal specification of .NET APIs that are intended to be available on all .NET runtimes.
The various .NET runtimes implement specific versions of .NET Standard.
Introducing .NET Standard:
.NET Standard is a set of APIs that all .NET platforms have to implement. This unifies the .NET platforms and prevents future fragmentation.
.NET Standard 2.0 will be implemented by .NET Framework, .NET Core, and Xamarin. For .NET Core, this will add many of the existing APIs that have been requested.
Introducing .NET Core:
.NET Core is essentially a fork of the NET Framework
Another way to look at it: The .NET Framework has essentially two forks. One fork is provided by Microsoft and is Windows only. The other fork is Mono which you can use on Linux and Mac.
For more details please read:
- .NET Standard FAQ
- .NET Standard (The table lists all versions of .NET Standard and the platforms supported)
- Introducing .NET Standard
- Introducing .NET Core