我有一些
在 asp vnext 中我可以定义 3 种类型的运行时
在 Project.json 中,它看起来像这样:
"frameworks":
{
"dotnet": { },
"dnx451": { },
"dnxcore50": { }
}^
用户界面缩短了这个
我假设如下:
dnxCore是新的.net Core 框架。
dotnet是之前的运行时间
dnx451:在project.json 中定义“dotnet”或“dnx451”时有什么不同?
两者不应该都使用 .net 执行运行时运行吗?
还取决于我选择的项目模板(vNext ClassLib 或 vNext Console Lib)默认包含其中之一。
以不同的方式回答您的问题:库应该针对 SDK 所需的环境。如果您不需要 SDK 使用netstandard
(或在 .NET Core RC2 之前dotnet
).
-
dnxcore50
在 CoreCLR/CoreFx 上运行的 DNX SDK(已弃用, use netcoreapp1.0
反而)。
-
dnx451
在 .Net 4.5.1 上运行的 DNX SDK(桌面 CLR/完整 BCL 和 FCL)(已弃用, use net451
反而)。
-
net46
.Net Framework 4.6 SDK 在桌面 CLR/完整 BCL 和 FCL 上运行。
-
uap10.0
在 .Net Native/CoreFx 上运行的 UWP Windows 10 SDK。
-
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
所有平台(.NET Core、.NET Framework、Xamarin、Mono、Unity3D)都必须实现(或抛出 NotImplementedException)。这netstandard2.x
大致是 .NET Framework 的 BCL 库(没有 WMI、WinForms、WPF、WCF、WWF 等 FCL 组件)。通过兼容性填充程序,大多数现有的 NuGet 包将自动netstandard2.0
.
因此,如果您的库只有一些算法或者不特定于平台,请使用netstandard
/ dotnet
。如果您的任何依赖项受到限制,则此依赖项将传播到使用它的应用程序(例如 DNX、UWP、.Net46)。
我只能像玛拉基一样强调奥伦的文章系列。 (他刚刚写了一篇新文章:https://oren.codes/2015/07/29/targeting-net-core/ https://oren.codes/2015/07/29/targeting-net-core/关于同一主题)。
ps: dotnet
/ netstandard
不是一个具体的运行时,而是它的抽象。在这种情况下,它是一个目标,甚至没有指定运行时,而是说:任何正确解释 IL 的东西都会运行。例如dnxcore5
是指定具有特定运行时 (CoreCLR) 的 SDK(DNX) 的目标。在这种情况下,您可以对运行时行为做出进一步的假设(例如 JIT 的使用、x-plat 实现的可用性等)。
pps:请注意dotnet
名称已转换为术语netstandard
即将发布的 RC2 版本。此外,完整的 DNX SDK 分为 .NET Core 和 ASP.NET 团队。因此,.NET Core (CoreCLR/CoreFx) 的框架名称是netcoreapp1.0
而 99% 的 ASP.NET 堆栈只是带有以下内容的库netstandard1.5
。 DNX 绰号(dnx451
and dnxcore50
) 已弃用。在 .NET Framework(而不是 .NET Core)上运行 ASP.NET Core 时,使用net451
。详细阅读请重读:https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md 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
通过使用中间兼容性垫片来封装。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)