It's actually pretty easy if you're new to .NET. If that's the case, it's just .NET 8 and forget about everything else.
.NET Core was renamed to .NET 5, which became the mainline .NET. .NET 8 is simply the latest version.
.NET Standard is intended to be a common layer to help bridge between .NET Framework and .NET Core and .NET 5+. It shouldn't be used outside of that context.
.NET Framework is the old, Windows-only .NET. It should not be used for new projects and should be migrated away from.
It is my understanding that it isn't recommend though anymore. In that it should only be used if you really want your library used in .NET Framework. My vague recollection is that it keeps you away from some of the benefits of the modern .NET.
Eh... since .NET 5 I feel that things have become simpler. If you are writing applications, there is really just the "modern" .NET to keep track of. Occasionally, you have to add "Core" to a Google search to not see results referencing old .NET framework APIs, but that's about it.
If you are writing a .NET library _and_ want it to work with very old deployments, then you also have to care about .NET Standard.
I've been thinking about this recently, Microsoft seem to consequently name things in the least intuitive way.
Like seriously: Windows XP -> Windows Vista -> Windows 7 -> Windows 8 -> Windows 10
or: xbox -> xbox 360 -> xbox one -> xbox series x/s
and a bunch of other things, like Azure Devops, which doesn't necessary have anything to do with Azure or Devops depending on how you use it. And their editor Visual Studio, and their other editor Visual Studio Code, which are not really related. IIRC, I also had to make a visual studio account in order to access the azure devops repository at my previous client, even though I don't use visual studio (the editor).
It's seriously like the Fast and Furious franchise.
They seem to be doing it for most of the microsoft products I can name, I wonder if there is a reason for it?
This is not unusual in Microsoft-land. If a tech stack or version is very widely adopted or heavily revamped in a new version, they will often support that old version for a very long time - see Windows 7.
The name scheme was confusing only during the "overlap" period. At this point again you can strictly pay attention to version numbers: 8 > 7 > ... > 4 > 3 > ...
Any version < 4 is out of security support. Only one version number starting with 4 remains in security support but you don't want to use it if you can use a higher version number. .NET 8 is new/fresh/current LTS. The rest of the "naming scheme" is dead weight.
If you care about support, within 3 years you'll likely need to update dependencies as well which means a recompile. You might as well change your target at that time. Honestly the breaking changes have been pretty minimal lately and it's pretty trivial to upgrade.
.NET Framework is part of Windows. That means it is very stable and supported for a very long time. But it is also not possible to evolve it further. That is why the .NET team forked it to make .NET Core, which is cross platform and installs versions side by side. This is what evolved into .NET, most recently .NET 8.
That means "stable" as in "it is not going to change".
But from a developer perspective, binding redirects, brrrrrr.... Also, source-level framework debugging tends to break every so often. It is obvious their focus is on the new .NET.
If you're doing any new work as of the past 3 years, it's just .NET. It's really not that confusing unless you're updating legacy software in which case you're probably quite embedded in the ecosystem already.
It is confusing, but recently it's pretty straightforward
.Net framework is the OG .Net and is windows specific. That stopped at v5 (I think)
.Net Core is the cross-platform reboot that was mostly a subset of framework, but not a proper subset.
If you wanted to write a library that worked across everything, you would target .Net standard, which wasn't a framework itself, but the intersection of APIs that existed everywhere.
Today, framework is discontinued, which makes standard kinda moot, and they dropped the "Core" branding. So as of .Net 6, that's pretty much all you'd write for new code.
If you have legacy code, then yeah you're back in that quagmire
I wanted to create an application. So apparently among the options are .net core blazor and MAUI blazor and their non-blazor versions. So many options with very confusing marketing.
- Open-source, portable, updated, default choice: .NET Core 1 2 3, .NET 5/6/7/8
- Included with Windows or Unity, frozen in time: .NET Framework 4 (don't use anything older)
- Want to support both: .NET Standard (this is a subset that both can run)
.NET Core was renamed to .NET 5, which became the mainline .NET. .NET 8 is simply the latest version.
.NET Standard is intended to be a common layer to help bridge between .NET Framework and .NET Core and .NET 5+. It shouldn't be used outside of that context.
.NET Framework is the old, Windows-only .NET. It should not be used for new projects and should be migrated away from.