类库是 .NET 的共享库 概念。 它们使你能够将有用的功能组件化为多个应用程序可以使用的模块。 它们还可以用作在应用程序启动时加载不需要或未知功能的方法。 类库是使用 .NET 程序集文件格式描述的。
可以使用三种类型的类库:
- 特定于平台 的类库有权访问给定平台中的所有 API(例如 Windows 上的 .NET Framework),但只能由面向该平台的应用和库使用。
- 可移植 类库可以访问一部分 API,并且可由面向多个平台的应用和库使用。
- .NET Standard 类库是平台特定的可移植库概念合并到一个模型,可提供两者的最佳功能。
特定于平台的类库
特定于平台的库绑定到单个 .NET 平台(例如 Windows 上的 .NET Framework),因此可以依赖于已知的执行环境。 此类环境公开一组已知的 API(.NET 和 OS API),并维护和公开预期状态(例如 Windows 注册表)。
创建特定于平台的库的开发人员可以充分利用基础平台。 这些库只会在该给定平台上运行,使平台检查或其他形式的条件代码不必要(针对多个平台的模式单一溯源代码)。
特定于平台的库是 .NET Framework 的主类库类型。 即使出现其他 .NET 实现,特定于平台的库仍然是主要的库类型。
可移植类库
多个 .NET 实现支持可移植库。 它们仍然可以依赖于已知的执行环境,但是,环境是由一组具体 .NET 实现的交集生成的合成环境。 公开的 API 和平台假设是平台特定的库可用的子集。
创建可移植库时,可以选择平台配置。 平台配置是需要支持的平台集(例如 .NET Framework 4.5+、Windows Phone 8.0+)。 要支持的平台越多,可生成的 API 和平台假设就越少,公分母越小。 这一特征最初可能会令人困惑,因为人们通常认为“更多更好”,但发现更多受支持的平台会导致更少的可用 API。
许多库开发人员已从从一个源(使用条件编译指令)生成多个特定于平台的库切换到可移植库。 有多种方法可在可移植库中访问平台特定的功能,其中“诱饵替换”是目前最广为接受的方法。
.NET Standard 类库
.NET Standard 库是平台特定的可移植库概念的替代。 它们特定于平台,从基础平台(无合成平台或平台交叉)公开所有功能。 它们可移植,因为它们适用于所有支持平台。
.NET Standard 公开一组库 协定。 .NET 实现必须完全支持每个协定,否则就全都不支持。 因此,每个实现都支持一组 .NET Standard 协定。 因此,每个 .NET Standard 类库在支持其协定依赖项的平台上都受支持。
.NET Standard 不会公开 .NET Framework 的全部功能(也不是目标),但是,库确实公开的 API 比可移植类库多得多。
以下实现支持 .NET Standard 库:
- .NET 核心
- .NET 框架
- 单
- 通用 Windows 平台 (UWP)
有关详细信息,请参阅 .NET Standard。
Mono 类库
Mono 支持类库,包括前面所述的三种类型的库。 Mono 通常被视为 .NET Framework 的跨平台实现。 部分原因是平台特定的 .NET Framework 库可以在 Mono 运行时上运行,而无需修改或重新编译。 在创建可移植类库之前,这一特征已到位,因此,在 .NET Framework 和 Mono 之间启用二进制可移植性是一个明显的选择(尽管它只以一个方向工作)。