新的 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 不是可移植的吗? netcore 和 netcoreapp 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 请求/响应/会话
通过几个Hello World感受.NET Core全新的开发体验