Difference between dnx, net, dnxcore identifiers in project.json ASP.NET 5

I was very confused about the difference between dnx451 and net451 identifiers in project.json file and whether there is a difference at all. After some investigation I found out that net451 != dnx451.

The difference:

net20 - net 46 .. DNX SDK running on .Net 4.5.1 (Desktop CLR / Full BCL and FCL)
dnx451 - dnx46 .. .Net Framework SDK running on .Net 4.51 (Desktop CLR / Full BCL and FCL).

Why there is net451 identifier available in ASP.NET 5 projects if ASP.NET 5 web projects require DNX anyway? net451 identifier is obviously there only for console applications when building cross platform console application with ASP.NET 5 project template in Visual studio because with console application you can target .NET Framework also and if so you will need net451 identifier.

If building ASP.NET 5 web applications net451 identifier is not supported because ASP.NET 5 web applications need DNX (.NET Execution Environment).