.NET Standard与.NET Core

问题描述 投票:205回答:6

我已经了解了.NET Standard和.NET Core之间的区别,但我真的不知道区别是什么,或者何时选择.NET标准库项目以及何时选择.NET Core库项目。

我已经读过.NET Standard是为了确保一组API始终可用,无论使用哪个平台(只要该平台与我选择的.NET标准版本兼容)。如果我没有弄错的话,这意味着我可以创建一个.NET Standard类库,然后在任何与我选择的.NET Standard版本兼容的平台上使用它。

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

所以最后,我没有看到差异。我什么时候应该使用哪个?他们之间有什么区别?

.net .net-core .net-standard
6个回答
166
投票

我将尝试进一步澄清您的疑虑,并延长Jon Skeet的答案。

.NET Standard是一个规范,因此为特定.NET Standard版本编译的库可以在不同的.NET Standard实现中使用。

正如我在其他评论中所说,.NET标准与其他.NET标准实现(.NET Core,.NET Framework等)之间的关系的一个很好的类比是this gist by David Fowler:.NET标准版本是Interfaces,而框架是那些的实现接口。

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

NET Standard Interfaces analogy

任何针对NetCore10的东西都可以使用INetStandard15 API和NetCore10特定的API(例如DotNetHostPolicy)。

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

相反,如果您只需要访问INetStandard15 API(并且针对该规范而不是具体框架),您的库可能会被any framework which implements itNetCore10NetFramework462等)使用。

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


165
投票

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

因此,如果您创建.NET Core库,它将可以访问在.NET Core中实现但不属于.NET Standard的内容,并且您的库将与.NET Standard的其他实现不兼容,如Xamarin,Tizen,完整的.NET桌面框架等。

简而言之:要实现最大的可移植性,请使您的库以.NET Standard为目标。


4
投票

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

因此,如果您确定仅将库用于.NET Core项目,则可以忽略.NET Standard,但如果.NET Framework或Mono for Xamarin使用您的代码的可能性很小,那么最好坚持使用.NET。标准

另请注意,更高版本的.NET Standard包含更多API,但更多平台支持更低版本。因此,如果您创建要在运行时之间共享的.NET标准库,则可以使用最低版本,这可以帮助您达到最大数量的平台。例如,如果要在.NET Framework 4.5和.NET Core 1.0上运行,则可以使用的最高.NET标准版本是.NET Standard 1.1。这个this great table from documentation有关它的更多信息。

PS:此外,如果您想将库转换为.NET Standard,.NET Portability Analyzer可以帮助您。


2
投票

.NET Standard是所有.NET实现必须提供的API规范。它为.NET系列带来了一致性,使您能够构建可以从任何.NET实现中使用的库。它取代了用于构建共享组件的PCL。

.NET Core是.NET标准的一种实现,它针对使用ASP.NET Core构建控制台应用程序,Web应用程序和云服务进行了优化。它的SDK附带了一个功能强大的工具,除了Visual Studio开发支持完整的基于命令行的开发工作流程。您可以在aka.ms/netstandardfaqaka.ms/netcore了解更多相关信息。


以上,以及对此问题中讨论的大多数内容的非常明确的解释,可以在以下微软非常有用的文章中找到(MSDN - 2017年9月):.NET Standard - Demystifying .NET Core and .NET Standard


0
投票

你的意思是.NET Framework吗?因为.NET标准是一种实现,例如.NET Framework,.NET Core和Xamarin。

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

在开发环境的角度来看,.Net核心是轻量级的。因此,你可以使用VSCode,Sublime,用于IDE(不仅仅是visual studio)。


0
投票

.NET Standard是.NET API的规范,旨在.NET实现上可用。这使得能够为所有.NET实现定义统一的BCL API集。

.NET Core就是.NET Standard的一种实现。 .NET Framework是.NET Standard的另一种实现。

图片来自.NET Blog

enter image description here

Federicos answer为您提供了每个框架如何随版本发展的图形概述。看看下面的图表from Microsoft Docs

enter image description here

Targeting .NET Standard增加了您的平台支持,而针对特定.NET平台(如.NET Core(或.NET Framework))将允许您使用该平台的所有平台功能。

© www.soinside.com 2019 - 2024. All rights reserved.