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

我有一些
在asp vnext中,我可以定义3种类型的运行时

  • dnxCore
  • dnx451
  • 网络

在Project.json中,如下所示:

“框架”:
{
“dotnet”:{},
“dnx451”:{},
“dnxcore50”:{}
}^

用户界面显示了这一点

我假设如下:

dnxCore是新的.net核心框架

dotnet是上一个运行时

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

两者不都应该与.net执行运行时一起运行吗

还取决于我选择的项目模板(vNext ClassLib或vNext Console Lib),默认包含其中一个

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

  • dnxcore50在CoreCLR/CoreFx上运行的DNX SDK(已弃用,请改用netcoreapp1.0
  • 运行在.Net 4.5.1(桌面CLR/完整BCL和FCL)上的DNX SDK(dnx451DNX SDK已弃用,请改用net451
  • net46运行在桌面CLR/完整BCL和FCL上的.Net Framework 4.6 SDK
  • uap10.0UWP Windows 10 SDK运行在.Net Native/CoreFx上
  • netcoreapp1.0。运行在CoreCLR/CoreFx上的netcoreapp1.0SDK
  • netstandard1.5(RC2,dotnet之前)声明其依赖项的任何纯IL代码(基于System.Runtime的库,而不是PCL契约)。框架依赖项适用于.Net 4.5.x及以上版本、.Net Core或UWP(不同版本中基于System.Runtime的库集)。由于RC2dotnet已被弃用,请改用netstandard
  • netstandard2.0(.NET Core 2.0;~2017年6月)所有平台(.NET Core、.NET Framework、Xamarin、Mono、Unity3D)必须实现(或抛出NotImplementedException)的仅依赖于netstandard.dll的功能集的任何纯IL代码。netstandard2.x大致上是.NET Framework的BCL库(没有诸如WMI、WinForms、WPF、WCF、WWF等FCL组件)。通过兼容性垫片,大多数现有NuGet软件包将自动成为netstandard2.0

因此,如果您的库只有一些算法或不是特定于平台的,请使用netstandard/dotnet。如果您的任何依赖项受到限制,此依赖项将传播到使用它的应用程序(例如DNX、UWP、.Net46)

我只能像Malachi一样强调Oren的文章系列。(他刚刚写了一篇新的:https://oren.codes/2015/07/29/targeting-net-core/ 关于同一主题)

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

pps:请注意,dotnet名称在即将发布的RC2版本中被转换为术语netstandard。此外,完整的DNX SDK在.NET核心团队和ASP.NET团队之间进行了拆分。因此,.NET核心的框架名字对象(CoreCLR/CoreFx)是netcoreapp1.0,而ASP.NET堆栈的99%只是具有netstandard1.5的库。不推荐使用的DNX名字对象(dnx451dnxcore50)。在.NET Framework上运行ASP.NET Core(而不是.NET Core)时,请使用net451。详情请参阅:https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md

PPP:请继续注意,netstandard1.x基于依赖关系的契约的概念没有得到进一步发展,而是变成了一个(巨大的)标准契约(32k API;netstandard2.0),必须由包括即将推出的.NET Core 2.0在内的所有平台实现。此更改的优点是,NuGet软件包的大多数现有生态系统(参考mscorlib和friends)可以通过使用中间兼容性插件集成到netstandard2.0软件包中

发表评论