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

Project.json definition dnx451 vs .dotnet ( 4.51)

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

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

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

并且 ui 支持这个

我假设如下:

dnxCore 是新的 .net 核心框架。

dotnet是之前的运行时间

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

不应该 运行 和 .net 执行 运行 时间吗?

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

dotnet 以一系列 .NET Core 4.6 兼容性为目标。

"dotnet This is the new .NET Core for packages that don’t have any app model requirements." - reference link

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

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

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

因此,如果您的库只有一些算法或不特定于平台,请使用 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 上的 运行 ASP.NET Core(而不是 .NET Core)使用 net451。详细阅读:https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md

ppps:请继续注意,netstandard1.x 基于依赖合约的概念并未得到进一步发展,而是更改为一个(巨大的)标准合约(32k API;netstandard2.0 ) 必须由所有平台实现,包括即将推出的 .NET Core 2.0。此更改的优势在于,大多数现有的 NuGet 包生态系统(指 mscorlib 和朋友)可以通过使用中间兼容性垫片集成到 netstandard2.0 包中。