Project.json 定义 dnx451 与 .dotnet ( 4.51)
Project.json definition dnx451 vs .dotnet ( 4.51)
我有一些
在 asp vnext 中我可以定义 3 种类型的 运行time
- dnxCore
- dnx451
- 网络
在 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 名字对象(dnx451
和 dnxcore50
)。当 .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
包中。
我有一些 在 asp vnext 中我可以定义 3 种类型的 运行time
- dnxCore
- dnx451
- 网络
在 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 名字对象(dnx451
和 dnxcore50
)。当 .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
包中。