.NET标准与.NET核心

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

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

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

所以最后,我看不出有什么不同。 我应该什么时候使用哪个? 他们有什么区别?


我会尝试进一步澄清你的疑惑并扩展Jon Skeet的答案。

.NET Standard是一个规范,因此为特定.NET标准版编译的库可用于不同的.NET标准实现。

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

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

NET标准接口比喻

任何针对NetCore10都可以访问INetStandard15 API和NetCore10 特定的 API(如DotNetHostPolicy )。

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

如果您只需要访问INetStandard15 API(并且定位该规范而不是具体框架),那么您的库可以被实现它的任何框架( NetCore10NetFramework462等)使用。

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


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

所以,如果你创建一个.NET Core库,它将可以访问在.NET Core中实现的东西,但不是.NET Standard的一部分,并且你的库不会与.NET Standard的其他实现兼容,如Xamarin,Tizen,完整的.NET桌面框架等。

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


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

因此,如果您确定只会将.NET库用于.NET Core项目,则可以忽略.NET Standard,但如果您的代码很可能被.NET Framework或Mono用于Xamarin,那么更好地坚持.NET标准

另请注意,更高版本的.NET Standard包含更多API,但更低版本支持更多平台。 因此,如果您创建要在运行时间之间共享的.NET标准库,则可以定位最低版本 ,从而帮助您达到最大数量的平台。 例如,如果您想在.NET Framework 4.5和.NET Core 1.0上运行,则可以使用的最高.NET标准版本是.NET Standard 1.1。 这是从文档中获取更多信息的伟大表格。

PS:另外如果你想将你的库转换为.NET标准,.NET可移植性分析器可以帮助你。

链接地址: http://www.djcxy.com/p/14367.html

上一篇: .NET Standard vs .NET Core

下一篇: What Features are missing from Rx that are in CEP Platforms?