新的 netstandardapp 和 netcoreapp TFM 有啥区别?

Posted

技术标签:

【中文标题】新的 netstandardapp 和 netcoreapp TFM 有啥区别?【英文标题】:What's the difference between the new netstandardapp and netcoreapp TFMs?新的 netstandardapp 和 netcoreapp TFM 有什么区别? 【发布时间】:2016-08-26 01:35:51 【问题描述】:

我注意到 NuGet 最近添加了对与 .NET Core 相关的几个新 TFM 的支持,包括:

netstandard (1.0-1.5) netstandardapp (1.5) netcoreapp (1.0)

据我所知,netstandard 是可移植配置文件的 .NET Core 等价物;它允许您使用单个名字来定位多个平台,而不是明确说明您支持的每个平台,例如portable-net45+netcore45+wp81.

同时,根据this documentnetstandardapp 更像是.NET Core 中的控制台应用程序;它代表任何 .NET Core 运行时(例如 CoreCLR、CoreRT)的东西。

那么,netcoreapp 究竟应该是什么?我发现了它的跟踪问题here,,其中包括底部的评论,有点解释了区别是什么,但我不明白它们之间有什么区别

NETStandard.Library + 应用主机

.NET Core 基础安装

是。谁能给我解释一下?

【问题讨论】:

【参考方案1】:

.NET 标准库 (netstandard) 是跨应用程序模型的一致库。 .NET Core (netcoreapp) 运行在 .NET 标准库之上,是一个 AppModel。在 GitHub 页面上,他们回答了 .NET Standard 应用程序是什么以及 .NET Core (https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-standard-applications.md) 和 (https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md) 的区别

更新: .NETStandardapp 已过时。 NETCore 应用替换它 (https://github.com/NuGet/Home/issues/2524)

问:什么是 .NET Standard 应用程序? 答:.NET Standard 应用程序是可以在任何 .NET Core 运行时上运行的应用程序:CoreCLR(当前)和 .NETNative(未来)。它可以在许多 .NET 核心平台之一(Windows、OS X 和 Linux)上运行。它依赖于给定运行时提供的主机。它是由应用程序所依赖的包构建的可组合框架。它的程序集加载策略允许更新版本的依赖项,而无需任何应用程序配置(例如,不需要 BindingRedirects)。

问:这与 .NETCore 有何不同?答:.NETCore 目标 框架代表 Windows 8、Windows 8.1 和通用 Windows 平台应用。出于兼容性目的,此绰号不能 可重用于“.NET Core 应用程序”。品牌重叠是 不幸。

问:这与 .NETStandard 有何不同? 答:NETStandard 目标框架是一个抽象的目标框架,代表了许多框架和平台的 API 表面。因此,NETStandard 程序集可以在任何支持该程序集所针对的 NETStandard 的平台上运行,例如:.NET 桌面、Windows Phone、通用 Windows 平台应用程序、.NET 标准应用程序等。NETStandardApplication 是一个具体的目标框架,它代表单个具有 API 表面和实现的平台。 .NET 标准应用程序可以自行运行。 .NETStandard 库必须由特定的具体目标框架发布或使用,才能在该类型的应用程序中使用。

【讨论】:

您可以删除您的答案或至少修改它吗? netstandardapp 已死。查看其他答案。 更新了 .NETStandardapp 已过时并且 NETCoreapp 取而代之的答案。谢谢 那么为什么在我创建“类库(.NET Core)”项目时会得到.NETStandard 的引用? 为什么 .NET Core 目标框架代表 Windows 8、Windows 8.1 和通用 Windows 平台应用程序? .NET Core 不是可移植的吗? netcorenetcoreapp TFM 之间有什么区别? 没有netcore TFM。所以没有区别。是的 .NET Core 是跨平台的。答案有点过时,所以我会更新它。【参考方案2】:

新的 netstandardapp 和 netcoreapp TFM 有什么区别?

netstandardapp 已过时,netcoreapp 替换它。

那么,netcoreapp 到底应该是什么?

netcoreapp 是 .NET Core 平台的目标框架名字对象。如果将 netcoreapp 添加到 project.json 的 frameworks 部分,则应用的构建将在 .NET Core 上运行。

我不明白 NETStandard.Library + 应用程序主机和 .NET Core 基础安装之间的区别。谁能给我解释一下?

NETStandard.Library + 应用主机 是 NetStandard.App 包。不要使用它——它已经死了。它包括三个应用宿主包和标准库。

Microsoft.NETCore.DotNetHostPolicy Microsoft.NETCore.Platforms Microsoft.NETCore.Runtime NETStandard.Library

NET Core 基础安装 是 Microsoft.NetCore.App 包。改用这个。它保留了上述两个包,废弃了其中两个,并添加了大约 37 个额外的 Microsoft.*System.* 包。

其他Microsoft.* 程序集 Microsoft.NETCore.DotNetHostPolicy Microsoft.NETCore.Platforms <----- 2016年4月,两人成为 Microsoft.NETCore.Runtime <------- NETStandard.Library 的一部分。 NETStandard.Library 其他System.* 程序集

参考文献

https://github.com/NuGet/Home/issues/2524 > 声明 netstandardapp 目标框架名字对象“不再有效”。

https://github.com/dotnet/cli/issues/2482 > 声明“需要将针对 NetStandardApp 的项目移植到 NetCoreApp。CLI 1.0.0 RC2 将不支持 NetStandardApp。”

https://www.myget.org/feed/aspnetvnext/package/nuget/NETStandard.Library> 包历史显示了 2016 年 4 月的巨大变化。

【讨论】:

当您喜欢在源代码中可视化事物时,您会对此感到满意:gist.github.com/davidfowl/8939f305567e1755412d6dc0b8baf1b7。这个要点是由 ASP.NET Core 的架构师创建的。 @Thomas:非常好的链接。简短但内容丰富。

以上是关于新的 netstandardapp 和 netcoreapp TFM 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

使用来自 NetStandard2.0 库的 HttpContext 请求/响应/会话

ASP.NET Core AWS 无服务器和 CORS

Router的创建者——RouteBuilder

通过几个Hello World感受.NET Core全新的开发体验

Visual Studio 2015简体中文企业版/专业版下载+有效激活密钥

Linux中以单容器部署Nginx+ASP.NET Core