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的库设置为不同版本)。 与RC2dotnet
,不推荐使用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标记( dnx451
和dnxcore50
)弃用。 在.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。 这种改变的优点是,现有的大部分NuGet软件包(涉及mscorlib
和朋友)的生态系统可以通过使用中间兼容性垫片整合到netstandard2.0
软件包中。
dotnet的目标是一堆.NET Core 4.6的兼容性。 参考链接
“dotnet这是没有任何应用程序模型要求的新的.NET核心。” – 参考链接
所以通过这些定义, dotnet是新的运行时,而不是以前的