我已经了解了.NET Standard和.NET Core之间的区别,但我真的不知道区别是什么,或者何时选择.NET标准库项目以及何时选择.NET Core库项目 .
我已经读过.NET Standard是为了确保一组API始终可用,无论使用哪个平台(只要该平台与我选择的.NET标准版本兼容) . 如果我没弄错的话,这意味着我可以创建一个.NET Standard类库,然后在任何与我选择的.NET Standard版本兼容的平台上使用它 .
使用.NET Core,我已经读过它也是为了跨平台使用,所以如果我选择一个.NET Core库,我似乎也可以在很多平台上使用它,就像.NET Standard一样 .
所以最后,我没有看到差异 . 我什么时候应该使用哪个?它们之间有什么区别?
6 回答
我将尝试进一步澄清您的疑虑,并延长Jon Skeet的答案 .
.NET Standard是一个规范,因此为特定.NET Standard版本编译的库可以在不同的.NET Standard实现中使用 .
正如我在其他评论中所说,.NET标准与其他.NET标准实现(.NET Core,.NET Framework等)之间关系的一个很好的类比是this gist by David Fowler:.NET标准版本是
Interfaces
,而框架是那些的实现接口 .这个简化的图表可能有助于理解这种关系:
任何目标
NetCore10
都可以访问INetStandard15
API和NetCore10
specific API(例如DotNetHostPolicy
) .当然这个库不能用于不同的
INetStandard15
实现(NetCore10
不能转换为NetFramework462
或Mono46
) .相反,如果您只需要访问
INetStandard15
API(并且针对该规范而不是具体框架),any framework which implements it(NetCore10
,NetFramework462
等)可能会使用您的库 .Note: 在原始类比中David Fowler使用.NET标准版本和框架实现的接口 . 我相信使用接口和类更直观,更好地代表了规范和具体实现之间的关系 .
.NET Core是.NET Standard的一个实现 . 它's available on multiple operating systems, but that'不是一回事 - 还有.NET Standard的其他实现 .
因此,如果您创建.NET Core库,它将可以访问在.NET Core中实现但不属于.NET Standard的内容,并且您的库将与.NET Standard的其他实现不兼容,如Xamarin,Tizen,完整的.NET桌面框架等 .
简而言之:要实现最大的可移植性,请使您的库以.NET Standard为目标 .
.NET Core类库基本上是.NET Framework库的子集,它只包含较少的API . 坚持使用.NET Core类库很难在运行时之间共享代码 . 此代码可能不适用于不同的运行时(Mono for Xamarin),因为它没有您需要的API . 为了解决这个问题,有 .NET Standard, which is just set of specification that tells you which APIs you can use . .NET Standard的主要目的是在运行时之间共享代码 . 并且重要的是,此规范由所有运行时实现 . ( . NET Framework, .NET Core 和Mono for Xamarin) .
因此,如果您确定仅将库用于.NET Core项目,则可以忽略.NET Standard,但如果.NET Framework或Mono for Xamarin使用您的代码的可能性很小,那么最好坚持使用.NET . 标准
另请注意,更高版本的.NET Standard包含更多API,但更多平台支持更低版本 . Therefore if you create .NET Standard library that you want to share between runtimes then target the lowest version you can ,可帮助您达到最大数量的平台 . 例如,如果要在.NET Framework 4.5和.NET Core 1.0上运行,则可以使用的最高.NET标准版本是.NET Standard 1.1 . 这个this great table from documentation了解更多信息 .
PS:此外,如果您想将库转换为.NET Standard,.NET Portability Analyzer可以帮助您 .
以上,以及对此问题中讨论的大多数内容的非常明确的解释,可以在Microsoft的以下非常有用的文章中找到(MSDN - 2017年9月):.NET Standard - Demystifying .NET Core and .NET Standard
你的意思是.NET Framework吗?因为.NET标准是一种实现,例如.NET Framework,.NET Core和Xamarin .
我爱.NET Core因为我们可以在Linux上托管它(根据我的经验使用nginx) . 它与.NET框架不同,它只能在IIS上托管 . 在这种情况下你可以考虑托管预算(因为Windows服务器对我来说很昂贵) .
在 development environment perspective 中,.Net核心是轻量级的 . 因此,你可以使用VSCode,Sublime,用于IDE(不仅仅是visual studio) .
.NET Core没有任何GUI框架 . Windows窗体和WPF仅限于Microsoft Windows平台 .
如果您需要或需要跨平台GUI应用程序,那么您需要一个GTK GUI . 这在Linux和Windows下运行 . 您可以使用MonoDevelop来完成此操作 . 现在这种旧方法的唯一区别是,它们不是背后的版本 .