.NET Core 和 .NET Standard 是 .NET 生态系统中的两个重要概念,它们各自有不同的用途和目标。.NET Standard 旨在促进跨 .NET 实现的代码共享,而 .NET Core 提供了一个高性能、跨平台的运行时和开发框架,用于构建现代应用程序。选择取决于具体需求:是需要跨多个 .NET 实现共享代码的库,还是需要构建面向未来的、跨平台的应用程序。

1、.NET Standard

.NET Standard 是一个规范,定义了一组 API,这些 API 在所有实现了该标准的 .NET 实现中都是可用的。它旨在促进不同 .NET 实现之间的代码共享和可互操作性,包括 .NET Framework、.NET Core 和 Xamarin。通过针对 .NET Standard 编写库,开发人员可以确保他们的库可以在所有支持该标准版本的 .NET 实现上运行。创建可在多个 .NET 实现(如 .NET Core、.NET Framework 和 Xamarin)上运行的库。

.NET Standard 有多个版本,每个版本增加了更多的 API。较高版本的 .NET Standard 支持较新的功能,但兼容性范围较小。

2、.NET Core

.NET Core 是微软开发的跨平台开源框架,用于构建现代、可扩展、高性能的应用程序,可以运行在Windows、Linux和macOS等操作系统上。.NET Core 最初发布于2016年,它是.NET Framework 的一个重新设计和重构,旨在解决.NET Framework 在跨平台和性能方面的限制。.NET 5+(包括.NET 5、.NET 6、.NET 7 等)则是.NET Core 的后续版本。微软在发布.NET Core 3.1之后,宣布.NET Core将会迎来一个新的版本,即.NET 5,而不再继续使用.NET Core的命名。.NET 5+ 是一个全新的单一版本,它融合了.NET Core、.NET Framework和Xamarin(跨平台移动应用程序开发框架),使得开发者可以使用一套框架来构建不同平台的应用程序,从而简化了开发、测试和部署的流程。.NET 5+ 是.NET Core 的升级和延续,为开发者提供了更好的开发体验和更高的性能,是未来.NET 开发的主要版本。

3、.NET Standard 和 .NET Core 区别

.NET Standard 和 .NET Core 是为了满足不同的开发需求而共存的两个关键概念,在.NET生态系统中扮演着重要角色。首先,.NET Standard 的存在主要是为了解决跨平台兼容性问题。它定义了一组通用API,这些API在所有同意实现了.NET Standard 规范的平台上都可用,其中包括 .NET Core, .NET Framework 和 Mono/Xamarin 等。这意味着针对.NET Standard 开发的库能够在任何兼容的运行时环境中运行,提供了极高的可移植性。然而,这种可移植性是以API作用区域的限制为代价的,因为.NET Standard 库只能使用包含在 NETStandard.Library 中的API。

与此相对,.NET Core 专为访问更广泛的API作用区域而设计,只能在 .NET Core 运行时上运行。它包含在 Microsoft.NETCore.App 中的库远远超出了.NET Standard 的范围,提供了额外的约20个库,这些库提供了更丰富的功能,但牺牲了与其他.NET实现的兼容性。虽然.NET Core 库可以尝试引入一些.NET Standard 不兼容的库(如 Microsoft.NETCore.CoreCLR),但并非所有这些扩展库都能与.NET Standard 库兼容。

因此,选择.NET Standard 或 .NET Core 主要是基于兼容性与API访问之间的权衡。如果目标是最大化兼容的应用程序数量,推荐使用 .NET Standard 库,虽然这意味着可访问的.NET API范围有限。相反,如果目标是利用.NET的全部能力并接受只在.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的某些部分为代价的。

推荐文档