我有一些 在asp vnext中,我可以定义3种运行时类型
在Project.json中,它看起来像这样:
"frameworks":
{
"dotnet": { },
"dnx451": { },
"dnxcore50": { }
}^
和ui支持这个
我假设以下内容:
dnxCore 是新的.net核心框架。
dotnet 是上一个运行时
dnx451: 在project.json中定义“dotnet”或“dnx451”时有什么不同?
不应该都使用.net执行运行时运行吗?
另外,根据我选择的项目模板(vNext ClassLib或vNext Console Lib),默认包含一个或另一个。
答案 0 :(得分:69)
以不同的方式回答您的问题:库应该针对其所需的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
。在Desktop CLR / Full BCL和FCL上运行的.Net Framework 4.6 SDK。uap10.0
在.Net Native / CoreFx上运行的UWP Windows 10 SDK。netcoreapp1.0
在CoreCLR / CoreFx上运行的.NET Core 1.0 SDK。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; ~JUN 2017)任何纯IL代码,它仅依赖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/。)
ps:dotnet
/ netstandard
不是具体的运行时,它是它的抽象。它是一个目标,在这种情况下甚至没有指定运行时,而是说:任何正确解释IL的东西。例如,dnxcore5
是指定具有特定运行时(CoreCLR)的SDK(DNX)的目标。在这种情况下,您可以进一步假设运行时行为(如JIT的使用,x-plat实现的可用性等)。
pps:请注意,随着即将发布的RC2版本,dotnet
名称已转换为术语netstandard
。此外,完整的DNX SDK在.NET Core和ASP.NET Teams之间进行了拆分。因此,.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 Core 2.0。此更改的优势在于,NuGet包的大多数现有生态系统(引用mscorlib
和朋友)可以通过使用中间兼容性填充程序集成到netstandard2.0
包中。
答案 1 :(得分:7)
dotnet 针对一系列.NET Core 4.6兼容性。 reference link
“dotnet这是针对没有任何应用程序模型要求的软件包的新.NET Core。” - reference link
因此,通过这些定义, dotnet 是新的运行时,而不是前一个