Álv*_*cía 219 .net .net-core .net-standard
我已经了解了.NET Standard和.NET Core之间的区别,但我真的不知道区别是什么,或者何时选择.NET标准库项目以及何时选择.NET Core库项目.
我已经读过.NET Standard是为了确保一组API始终可用,无论使用哪个平台(只要该平台与我选择的.NET标准版本兼容).如果我没有弄错的话,这意味着我可以创建一个.NET Standard类库,然后在任何与我选择的.NET Standard版本兼容的平台上使用它.
使用.NET Core,我已经读过它也是为了跨平台使用,所以如果我选择一个.NET Core库,我似乎也可以在许多平台上使用它,就像.NET Standard一样.
所以最后,我没有看到差异.我什么时候应该使用哪个?他们之间有什么区别?
Fed*_*uma 177
我将尝试进一步澄清您的疑虑,并延长Jon Skeet的答案.
.NET Standard是一个规范,因此为特定.NET Standard版本编译的库可以在不同的.NET Standard实现中使用.
正如我在其他评论中所说的那样,对于.NET标准与其他.NET标准实现(.NET Core,.NET Framework等)之间关系的一个很好的类比是David Fowler的这个要点:.NET标准版本是Interfaces,而框架是这些接口的实现.
这个简化的图表可能有助于理解这种关系:
任何目标NetCore10都可以访问INetStandard15API 和 NetCore10 特定的 API(例如DotNetHostPolicy).
当然,这个库不能用于不同的INetStandard15实现(NetCore10不能转换为NetFramework462或Mono46).
如果,相反,只需要访问INetStandard15的API(和目标是规范,而不是一个具体的框架),您的库可以通过使用任何一个实现它的框架(NetCore10,NetFramework462,等)
注意:在最初的类比中,David Fowler使用.NET标准版本和框架实现的接口.我相信使用接口和类更直观,更好地代表了规范和具体实现之间的关系.
Jon*_*eet 173
.NET Core是.NET Standard的一种实现.它可以在多个操作系统上使用,但这不是一回事 - 还有.NET Standard的其他实现.
因此,如果您创建.NET Core库,它将可以访问在.NET Core中实现但不属于.NET Standard的内容,并且您的库将与.NET Standard的其他实现不兼容,如Xamarin,Tizen,完整的.NET桌面框架等.
简而言之:要实现最大的可移植性,请使您的库以.NET Standard为目标.
.NET Standard是 .NET API 的规范,旨在用于 .NET 实现。这允许为所有 .NET 实现定义统一的 BCL API 集。
.NET Core就是 .NET Standard 的一种这样的实现。.NET Framework 是 .NET Standard 的另一种实现。
图片来自.NET 博客
Federicos 的回答为您提供了每个框架如何随版本演变的图形概述。看看下面来自 Microsoft Docs 的图表。
针对.NET标准增加你的平台支持,而针对某一特定.NET平台,如.NET核心(或.NET框架)将允许您使用所有平台功能该平台。
.NET Core 类库基本上是 .NET Framework 库的一个子集,它只包含较少的 API。坚持使用 .NET Core 类库使得在运行时之间共享代码变得困难。此代码可能不适用于不同的运行时(Xamarin 的 Mono),因为它没有您需要的 API。为了解决这个问题,有.NET Standard,它只是一组规范,告诉您可以使用哪些 API。.NET Standard 的主要目的是在运行时之间共享代码。并且重要的是该规范由所有运行时实现。(.NET Framework、.NET Core和 Mono for Xamarin)。
因此,如果您确定您的库仅用于 .NET Core 项目,则可以忽略 .NET Standard,但如果您的代码被 .NET Framework 或 Mono for Xamarin 使用的可能性甚至很小,那么最好坚持 .NET 标准
另请注意,更高版本的 .NET Standard 包含更多 API,但更多平台支持更低版本。因此,如果您创建了一个想要在运行时之间共享的 .NET Standard 库,那么请尽可能以最低版本为目标,这有助于您覆盖最多的平台。例如,如果要在 .NET Framework 4.5 和 .NET Core 1.0 上运行,则可以使用的最高 .NET Standard 版本是 .NET Standard 1.1。有关它的更多信息,请参阅文档中的这个很棒的表格。
PS:此外,如果您想将库转换为 .NET Standard,.NET Portability Analyzer 可以帮助您。
| 归档时间: |
|
| 查看次数: |
28933 次 |
| 最近记录: |