新的NetStandardApp和NetCoreApp TFM有什么区别?

78
我注意到NuGet最近增加了对几个与.NET Core相关的新TFMs的支持,包括:
  • netstandard(1.0-1.5)
  • netstandardapp(1.5)
  • netcoreapp(1.0)
据我所知,netstandard是可移植配置文件的.NET Core等效物;它允许您使用单个标识符针对多个平台,而不是明确列出您支持的每个平台,例如portable-net45+netcore45+wp81
与此同时,根据这个文档netstandardapp更像是.NET Core中的控制台应用程序;它代表任何.NET Core运行时(例如CoreCLR、CoreRT)。
那么,netcoreapp究竟应该是什么? 我在这里找到了它的跟踪问题here,其中底部包含一条有点解释差异的评论,但我不明白

NETStandard.Library + app hosts

.NET Core base install

之间的区别是什么。 有人能解释一下吗?
2个回答

43
A: The .NET Standard Library (netstandard) 是跨应用程序模型的一致性库。.NET Core (netcoreapp) 运行在 .NET Standard Library 之上,是一个 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 Core 平台上(Windows,OS X 和 Linux)。它依赖于给定运行时提供的主机。它是由应用程序依赖的包构建的可组合框架。它的程序集加载策略允许使用更新版本的依赖项,而不需要任何应用程序配置(例如,不需要 BindingRedirects)。

问:这与 .NETCore 有何不同?
答:.NETCore 目标框架代表 Windows 8、Windows 8.1 和通用 Windows 平台应用程序。出于兼容性考虑,此名称不能再用于“.NET Core 应用程序”。品牌重叠是令人遗憾的。

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

.NET未来创新概述


7
你能删除你的回答,或者至少进行修改吗? netstandardapp 已经被废弃了。请查看其他答案。 - Thomas
3
已更新回答,.NETStandardapp已过时,NETCoreapp替代它。谢谢。 - Martijn van Put
3
为什么当我创建一个“Class Library (.NET Core)”项目时,会得到对“.NETStandard”的引用? - Simon_Weaver
1
为什么.NET Core目标框架代表Windows 8、Windows 8.1和通用Windows平台应用程序?.NET Core不是可移植的吗?netcore_和_netcoreapp TFM有什么区别? - Rosberg Linhares
1
没有netcore TFM,因此没有区别。是的,.NET Core是跨平台的。答案有点过时,所以我将更新它。 - Martijn van Put
显示剩余2条评论

21

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

netstandardapp已经过时,netcoreapp代替了它。

那么,netcoreapp到底是什么?

netcoreapp是.NET Core平台的目标框架标识符。如果在项目的frameworks部分中添加netcoreapp,则应用程序的构建将在.NET Core上运行。

我不明白NETStandard.Library + app hosts与.NET Core基础安装之间的区别是什么,有人能解释一下吗?

NETStandard.Library + app hosts是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。NetStandardApp 不会受到 CLI 1.0.0 RC2 的支持。”

https://www.myget.org/feed/aspnetvnext/package/nuget/NETStandard.Library > 包的历史记录显示了2016年4月的重大更改。


12
如果你喜欢用源代码来形象地表达想法,那么你一定会喜欢这个链接:https://gist.github.com/davidfowl/8939f305567e1755412d6dc0b8baf1b7。这篇代号由 ASP.NET Core 架构师创建。 - Thomas
1
@Thomas:非常好的链接。简短但非常有信息量。 - Stefan Steiger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接