Project.json定义dnx451 vs .dotnet(4.51)

我有一些在ASP的vnext我可以定义3types的运行时

  • dnxCore
  • dnx451
  • DOTNET

在Project.json中看起来像这样:

"frameworks": { "dotnet": { }, "dnx451": { }, "dnxcore50": { } }^ 

而且用户很喜欢这个

在这里输入图像说明

我假设如下:

dnxCore是新的.net核心框架。

dotnet是以前的运行时

dnx451:在project.json中定义“dotnet”或“dnx451”有什么不同?

不应该都运行.net执行运行时?

还取决于我select哪个项目模板(vNext ClassLib或vNext Console Lib)默认包含一个或另一个。

以不同的方式回答您的问题:一个库应该针对SDK所需的环境。 如果你不需要SDK使用netstandard (或.NET Core RC2 dotnet之前)。

  • 在CoreCLR / CoreFx上运行的dnxcore50 DNX SDK( 不build议使用 ,而是使用netcoreapp1.0 )。
  • 在.Net 4.5.1上运行的dnx451 DNX SDK(桌面CLR /完整BCL和FCL)( 不推荐使用 ,改为使用net451 )。
  • 运行在桌面CLR / Full BCL和FCL上的net46 .Net Framework 4.6 SDK。
  • 在Native / CoreFx上运行的uap10.0 UWP Windows 10 SDK。
  • netcoreapp1.0在CoreCLR / CoreFx上运行的.NET Core 1.0 SDK。
  • netstandard1.5 (RC2, dotnet之前)声明其依赖关系的任何纯IL代码(System.Runtime(based)库而不是PCL合同)。 .Net 4.5.x或更高版本提供了框架依赖关系,.NET Core或UWP(基于System.Runtime的库设置为不同版本)。 与RC2 dotnet ,不推荐使用netstandard
  • netstandard2.0 (.NET Core 2.0; netstandard2.0 2017)所有平台(.NET Core,.NET Framework,Xamarin,Mono,Unity3D)都必须实现netstandard.dll的function集的纯IL代码(或抛出NotImplementedException)。 netstandard2.x大致是.NET Framework的BCL库(没有像WMI,WinForms,WPF,WCF,WWF等FCL组件)。 通过兼容性垫片,大多数现有的NuGet软件包将自动成为netstandard2.0

所以如果你的库只有一些algorithm或不是特定的平台,使用netstandard / dotnet 。 如果您的任何依赖关系受到限制,则此依赖关系将传播到使用它的应用程序(例如DNX,UWP,.Net46)。

我只能像玛拉基那样强调奥伦的文章系列。 (他只是写了一个新的: https : //oren.codes/2015/07/29/targeting-net-core/在同一主题)。

ps: dotnet / netstandard不是一个具体的运行时,它是它的抽象。 这是一个目标,在这种情况下,甚至不指定运行时间,而是说:任何正确解释IL的东西去。 例如, dnxcore5是一个指定具有特定运行时(CoreCLR)的SDK(DNX)的目标。 在这种情况下,您可以对运行时行为做进一步的假设(如JIT的使用,x-plat实现的可用性等)。

pps:请注意,在即将到来的RC2版本中, dotnet名称已转换为术语netstandard 。 此外,完整的DNX SDK在.NET Core和ASP.NET团队之间分裂了。 因此,.NET Core(CoreCLR / CoreFx)的框架名字是netcoreapp1.0而99%的ASP.NET堆栈只是netstandard1.5库。 DNX标记( dnx451dnxcore50 )弃用。 在.NET Framework(而不是.NET Core)上运行ASP.NET Core时,请使用net451 。 详细阅读: https : //github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md

ppps:持续地意识到,基于依赖关系的合约的netstandard1.x概念没有进一步发展,而是变成了一个(巨大的)标准契约(32k API; netstandard2.0 ),必须由所有平台包括即将推出的.NET核心2.0。 这种改变的优点是,现有的大部分NuGe​​t软件包(涉及mscorlib和朋友)的生态系统可以通过使用中间兼容性垫片整合到netstandard2.0软件包中。

dotnet的目标是一堆.NET Core 4.6的兼容性。 参考链接

“dotnet这是没有任何应用程序模型要求的新的.NET核心。” – 参考链接

所以通过这些定义, dotnet是新的运行时,而不是以前的