我们什么时候应该用其中一个而不是另一个呢?
这个决定是兼容性和API访问之间的权衡.
使用.NET标准库时,如果您希望增加与库兼容的应用程序的数量,并且可以减少.NET API库可以访问的表面区域.
使用.NET核心库,当你想增加.NET API表面积,您的库可以访问,您可以只允许.NET核心应用程序与库兼容.
例如,一个目标库.NET标准1.3 will be compatible with个目标应用程序.NET框架4.6.NET Core 1.0、通用Windows平台10.0以及任何其他支持此功能的平台.净标准1.3.图书馆将无法进入图书馆的某些部分.不过,NetAPI.例如,Microsoft.NETCore.CoreCLR
软件包与兼容.NET Core,但不支持.净标准.
类库(.NET标准)和类库(.NET Core)有什么不同?
兼容性:面向.NET标准的库可以在任何符合.NET标准的运行时上运行,例如.NET Core、.NET Framework、Mono/Xamarin.另一方面,面向.NET Core的库只能在.NET Core运行库上运行.
API表面积:.NET标准库提供了NETStandard.Library
个标准库.NET核心库包含Microsoft.NETCore.App
中的所有内容.后者包括大约20个额外的库,其中一些我们可以手动添加到数据库中.NET标准库(如System.Threading.Thread
),其中一些与.净标准(如Microsoft.NETCore.CoreCLR
).
而且NET核心库指定运行时,并附带应用程序模型.例如,让单元测试类库可以运行是很重要的.
为什么两者都存在?
暂时忽视图书馆,原因是.NET标准的存在是为了可移植性;它定义了一组API.NET平台同意实施.任何实现.NET标准与针对该标准的库兼容.净标准.其中一个兼容平台是.净核心.
回到图书馆.NET标准库模板可以在多个运行时运行(以牺牲API表面积为代价).相反地,这一点是正确的.NET核心库模板的存在是为了访问更多的API表面积(以牺牲兼容性为代价),并指定用于构建可执行文件的平台.
Here is an interactive matrix,这说明了什么.NET标准支持.NET实现,以及有多少API表面积可用.