.NET Core 和 .NET 标准类库项目类型有什么区别?
在 Visual Studio 中,至少可以创建三种不同类型的类库:
- 类库(.NET Framework)
- 类库(.NET 标准)
- 类库 (.NET Core)
虽然第一种是我们多年来一直在使用的,但一直感到困惑的一个主要问题是何时使用 .NET Standard 和 .NET Core 类库类型。
那么,类库(.NET Standard)和类库(.NET Core)之间有什么区别,为什么两者都存在,什么时候应该使用其中一个?
类库(.NET Standard)和类库(.NET Core)有什么区别?
.NET Standard 是一个标准(换句话说,是一个规范),主要目的是改善代码共享并使每个 .NET 实现中可用的 API 更加一致。.NET Standard 的基础架构库和共享库,可供 .NET Framework 和 .NET Core 引用。
.NET Framework 用于不支持的技术,例如 Active Report、Window Services(现在支持 .NET 3.0)。
您可以使用 .NET Framework 和 .NET Core 创建可执行项目(如控制台应用程序或 ASP.NET 应用程序),但不能使用 .NET Standard 创建。
使用 .NET Standard,您只能创建一个不能独立执行的类库项目,而应该由另一个 .NET Core 或 .NET Framework 可执行项目引用。
我们什么时候应该使用其中一个?
该决定是兼容性和 API 访问之间的权衡。
当您想要增加与您的库兼容的应用程序数量时,请使用 .NET 标准库,并且您可以接受库可以访问的 .NET API 的减少。
当您想要增加库可以访问的 .NET API 时,请使用 .NET Core 库,并且可以只允许 .NET Core 应用程序与您的库兼容。
例如,以 .NET Standard 1.3 为目标的库将与以 .NET Framework 4.6、.NET Core 1.0、Universal Windows Platform 10.0 和任何其他支持 .NET Standard 1.3 的平台为目标的应用程序兼容。但是,该库将无法访问 .NET API 的某些部分。例如,该 Microsoft.NETCore.CoreCLR包与 .NET Core 兼容,但不与 .NET Standard 兼容。
.NET 标准库将为您提供什么功能(跨框架兼容性)
实现 .NET 标准库允许跨所有这些不同风格共享代码:
- .NET Standard 通过在您需要的环境中提供您期望和喜爱的所有 API,解决了所有平台上 .NET 开发人员的代码共享问题:桌面应用程序、移动应用程序和游戏以及云服务:
- .NET 标准 是所有.NET 平台都必须实现的一组 API。这统一了 .NET 平台并防止了将来的分裂。
- .NET Standard 2.0 将由.NET Framework、.NET Core和Xamarin实现。对于.NET Core,这将添加许多已请求的现有 API。
- .NET Standard 2.0 包含.NET Framework二进制文件的兼容性垫片,显著增加了您可以从 .NET Standard 库中引用的库集。
- .NET 标准 将取代可移植类库 (PCL) 作为构建多平台 .NET 库的工具。
为什么两者都存在?
.NET Standard 存在的原因是为了可移植性;它定义了一组 .NET 平台同意实现的 API。任何实现 .NET 标准的平台都与针对该 .NET 标准的库兼容。这些兼容平台之一就是 .NET Core。
.NET Standard 库模板是为了在多个运行时上运行而存在的(以牺牲 API 覆盖范围为代价)。相反,.NET Core 库模板是为了访问更多的 API 覆盖范围(以牺牲兼容性为代价)并指定构建可执行文件的平台而存在的。