在Visual Studio中,您至少可以创建三种不同类型的类库:

  • 类库(.NET Framework)
  • 类库(.NET标准版)
  • 类库(.NET核心)

虽然第一个问题是我们多年来一直在使用的,但我一直感到困惑的一个主要问题是何时使用.NET标准和.NET核心类库类型.我最近在try multi-target different framework versions分和creating a unit test project分的时候被这个咬了一口.

那么,类库(.NET标准版)类库(.NET核心)之间的区别是什么,为什么两者都存在,我们应该在什么时候使用一个而不是另一个?

推荐答案

我们什么时候应该用其中一个而不是另一个呢?

这个决定是兼容性和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表面积可用.

.net相关问答推荐

NETSDK1083:无法识别指定的 RuntimeIdentifierwin10-x64

为什么脚本不从 _Layout 加载并且必须添加到部分视图中?

从 Contentful 中的富文本元素中获取价值?

在本地运行 Azure 函数会在 .NET7 升级后出现无运行时错误

FileHelpers 未使用正确的日期格式

使用 SSH.NET 查找具有特定文件名的最新 SFTP 文件

代理、包装器或外观类之间有什么区别

为 XML 编码文本数据的最佳方法

IIS Express - 500.19 无法读取配置文件 - 因为它正在查看错误的路径

将笔画应用于 WPF 中的文本块

如何在 EF 代码优先中禁用链接表的级联删除?

生产代码中的 System.Diagnostics.Debug.WriteLine

哪个单元测试框架?

获取类型的默认构造函数的最有效方法

在 JavaScript 中使用 String.Format?

WCF服务客户端:内容类型text/html;响应消息的charset=utf-8 与绑定的内容类型不匹配

资源(.resx)文件有什么好处?

覆盖 ASP.NET MVC 中的授权属性

.Net 中 AOP 的最佳实现是什么?

如何从 HashSet 中检索实际项目?