.NET标准vs .NET核心

我读过关于。net Standard和。net Core的区别,但是我真的不知道区别是什么,或者什么时候选择。net Standard库项目和什么时候选择。net Core库项目。

我读过。net标准是为了确保一组api总是可用的,无论使用什么平台(只要该平台与我所选择的。net标准版本兼容)。如果我没有弄错的话,这意味着我可以创建一个。net标准的类库,然后在任何与我所选择的。net标准版本兼容的平台上使用它。

对于。net Core,我读到过它也是用于跨平台使用的,所以如果我选择一个。net Core库,似乎我也可以在许多平台上使用它,就像。net Standard一样。

所以最后,我看不出有什么不同。什么时候用哪个?它们之间的区别是什么?

39059 次浏览

. net Core是. net Standard的一个实现。它可以在多种操作系统上使用,但这不是一回事——. net Standard还有其他的实现。

因此,如果你创建了一个。net Core库,它将能够访问在。net Core中实现的东西,但是。net Standard的部分,并且你的库将不兼容。net Standard的其他实现,例如Xamarin, Tizen,完整的。net桌面框架等。

简而言之:为了获得最大的可移植性,让你的库成为。net标准。

我将试图进一步澄清你的疑问,并扩展乔恩·斯基特的答案。

. net Standard是规范,因此为特定的. net Standard版本编译的库可以用于不同的. net Standard实现。

正如我在其他评论中所说,. net标准和其他。net标准实现之间的关系的一个很好的类比(。.NET核心,.NET框架等)是这是大卫·福勒的要点: .NET标准版本是Interfaces,而框架是这些接口的实现。

这张简化的图表可能有助于理解这种关系:

NET标准接口类比

任何以NetCore10为目标的对象都可以访问INetStandard15 api 而且 NetCore10 具体的 api(例如DotNetHostPolicy)。

当然这个库不能在不同的INetStandard15实现中使用(NetCore10不能转换为NetFramework462Mono46)。

相反,如果你只需要访问INetStandard15 api(并且目标是该规范而不是具体框架),你的库可能会被任何实现它的框架 (NetCore10NetFramework462等)使用。

注意:在最初的类比中David Fowler为. net标准版本和框架实现使用了接口。相反,我认为使用接口和类更直观,也更好地表示了规范和具体实现之间的关系。

. net核心类库基本上是. net框架库的一个子集,只是包含了更少的api。坚持使用. net核心类库使得在运行时之间共享代码变得困难。这段代码可能不适用于不同的运行时(Xamarin的Mono),因为它没有您需要的API。要解决这个问题,有.NET标准,它只是一组规范,告诉你可以使用哪些api。. net Standard的主要目的是在运行时之间共享代码。所有运行时都要实现这个规范,这一点很重要。(。NET Framework, net核心和Mono for Xamarin)。

所以如果你确定你的库只用于。net Core项目,你可以忽略。net Standard,但是如果你的代码有一点点可能会被。net Framework或者Mono用于Xamarin,那么最好还是坚持。net Standard

还要注意。net标准版的高级版本包含了更多的api,而低版本则被更多的平台所支持。因此,如果你创建了一个。net标准库,想要在运行时之间共享,那么就尽量选择最低版本,它可以帮助你接触到大多数平台。例如,如果你想在。net Framework 4.5和。net Core 1.0上运行,你可以使用的。net Standard的最高版本是。net Standard 1.1。有关它的更多信息,请参阅这是文档中的表格

另外,如果你想把你的库转换成。net标准,. net可移植性分析器可以帮助你。

net标准是所有。net实现必须提供的api规范。它为.NET家族带来了一致性 并允许您构建可以从任何。net中使用的库 实现。它取代pcl构建共享组件 net核心是.NET标准的实现,为构建控制台应用程序、Web应用程序和云优化 服务使用ASP。净的核心。它的SDK带有强大的工具 除了Visual Studio开发之外,还支持一个完整的命令 基于行的开发工作流。你可以在 aka.ms / netstandardfaqaka.ms / netcore.


以上内容,以及对这个问题中讨论的大部分内容的非常清楚的解释,可以在以下微软(MSDN - 2017年9月)非常有用的文章中找到:.NET标准-揭开。net核心和。net标准的神秘面纱

你是说。net Framework吗?因为。net标准是一个实现,比如。net Framework、。net Core和Xamarin。

我喜欢。net Core,因为我们可以在Linux上托管它(在我的经验中使用nginx)。它与。net框架不同,你只能在IIS上托管。在这种情况下,你可以考虑托管预算(因为windows服务器对我来说很贵)。

开发环境视角中,. net核心是轻量级的。所以,你可以使用VSCode, Sublime, IDE(不仅仅是visual studio)。

net标准是用于。net实现的。net api的规范。这样就可以为所有。net实现定义统一的BCL api集。

net核心是. net Standard的一个实现,. net Framework是. net Standard的另一个实现。

来自net的博客的图像

enter image description here

费德里科•回答为您提供了每个框架如何随着版本发展的图形概述。看看下面的图表来自微软文档

enter image description here

针对 .NET标准增加你的 平台支持,而针对一个特定的。net平台,如 .NET Core(或。net Framework)将允许您为此使用所有的平台特性 平台。< / p >

简单来说,. net标准用于编写类库项目,这些类库项目被编译为dll。. net Core可以用于开发实际的web应用程序,可以在所有操作系统(Windows, Linux, MacOS)上运行。(在。net Core 3中,微软已经提供了使用WPF开发桌面应用程序的功能,但到目前为止,这些应用程序还不能跨平台,只能在windows系统上运行。. net标准库/dll可以在任何使用. net的应用程序中使用。.NET框架,.NET核心),这意味着你可以在。NET框架和。NET核心中使用。NET标准。