在Visual Studio中,至少有三种不同类型的类库可以创建:
类库(。净框架) 类库(。净标准) 类库(。净核心)
虽然第一种是我们已经使用多年的,但我一直困惑的一个主要问题是什么时候使用. net Standard和. net Core类库类型。最近当我尝试多目标不同的框架版本,并创建一个单元测试项目时,我就被这个问题咬了一口。
那么,类库(。NET标准)和类库(。NET Core),为什么两者都存在,什么时候我们应该使用其中一个而不是另一个?
在Visual Studio中,至少有三种不同类型的类库可以创建:
类库(。净框架) 类库(。净标准) 类库(。净核心)
虽然第一种是我们已经使用多年的,但我一直困惑的一个主要问题是什么时候使用. net Standard和. net Core类库类型。最近当我尝试多目标不同的框架版本,并创建一个单元测试项目时,我就被这个问题咬了一口。
那么,类库(。NET标准)和类库(。NET Core),为什么两者都存在,什么时候我们应该使用其中一个而不是另一个?
当前回答
. net标准的存在主要是为了改进代码共享,并使每个. net实现中可用的api更加一致。
在创建库时,我们可以将目标设置为。net Standard 2.0,这样所创建的库就可以兼容不同版本的。net Framework,包括。net Core、Mono等等。
其他回答
net核心 . net Core是一个免费的、跨平台的、开源的托管框架实现。它支持四种类型的应用程序:控制台、ASP。NET核心、云和通用Windows平台(UWP)。Windows窗体和Windows Presentation Foundation(WPF)不是. net Core的一部分。
从技术上讲,. net Core只支持控制台应用程序。ASP。NET Core和UWP是建立在。NET Core之上的应用程序模型。
与。net Framework不同,. net Core不被认为是Windows组件。因此,更新以NuGet包的形式出现,而不是通过Windows Update。由于. net Core运行时是App-Local安装的,并且应用程序是通过包管理器更新的,因此应用程序可以与特定的. net Core版本相关联并单独更新。
net标准 托管框架的每个实现都有自己的一组基类库。基类库(BCL)包含异常处理、字符串、XML、I/O、网络和集合等类。
. net标准是实现BCL的规范。由于. net实现需要遵循这个标准,应用程序开发人员不必担心每个托管框架实现的BCL的不同版本。
框架类库(FCL),如WPF, WCF和ASP。NET不是BCL的一部分,因此不包括在。NET标准中。
. net标准和. net实现之间的关系就像HTML规范和浏览器之间的关系一样。第二个是第一个的实现。
因此,. net Framework、Xamarin和. net Core都在它们的托管框架中实现了BCL的. net标准。由于计算机行业将继续引入新的硬件和操作系统,将会有新的。net托管框架。该标准允许应用程序开发人员知道将有一组他们可以依赖的一致api。
每个. net版本都有一个。net标准的相关版本。
通过提供一致的api,将应用程序移植到不同的托管实现以及提供工具变得更加容易。
. net Standard被定义为一个单独的NuGet包,因为所有的。net实现都需要支持它。使用工具变得更容易,因为工具有一组一致的api可用于给定的版本。您还可以为多个. net实现构建一个库项目。
您还可以为平台特定的api构建. net标准包装器。
简短的回答是:
IAnimal == .NetStandard (General)
ICat == .NetCore (Less general)
IDog == .NetFramework (Specific / oldest and has the most features)
. net核心类库是建立在。net标准之上的。如果你想实现一个可移植到。net Framework、。net Core和Xamarin的库,请选择。net标准库
.NET Core最终将实现.NET Standard 2 (Xamarin和.NET Framework也将实现)
因此,。net Core、Xamarin和。net Framework可以被看作是。net Standard的不同版本
为了让你的应用程序能够在未来实现代码共享和重用,你应该实现。net标准库。
微软还建议您使用. net标准,而不是可移植类库。
引用MSDN作为一个权威的来源,. net标准旨在成为一个库来统治所有的库。由于图片胜过千言万语,下面的内容将使事情变得非常清楚:
1. 您当前的应用程序场景(片断)
和我们大多数人一样,你可能正处于以下情况: (。NET Framework, Xamarin和现在的。NET Core风格的应用程序)
2. .NET标准库将为你提供什么(跨框架兼容性)
实现.NET标准库允许在所有这些不同的风格之间共享代码:
对于没有耐心的人:
.NET Standard solves the code sharing problem for .NET developers across all platforms by bringing all the APIs that you expect and love across the environments that you need: desktop applications, mobile apps & games, and cloud services: .NET Standard is a set of APIs that all .NET platforms have to implement. This unifies the .NET platforms and prevents future fragmentation. .NET Standard 2.0 will be implemented by .NET Framework, .NET Core, and Xamarin. For .NET Core, this will add many of the existing APIs that have been requested. .NET Standard 2.0 includes a compatibility shim for .NET Framework binaries, significantly increasing the set of libraries that you can reference from your .NET Standard libraries. .NET Standard will replace Portable Class Libraries (PCLs) as the tooling story for building multi-platform .NET libraries.
这里有一个表格,可以帮助您了解您可以针对的. net标准的最高版本,以及您打算在哪个. net平台上运行。
来源:MSDN:介绍。net标准
每个框架都有自己的类库。
. net框架的基类库。 . net Core的核心库。 Xamarin的Mono类库。
微软决定将所有这些类库合并到一个可以在所有框架中实现的库中。为此,他们开发了。net标准。
微软决定做一个统一的框架,. net 5是。net核心和。net框架的统一框架。在。net 6中,他们也将Xamarin合并到。net MAUI项目中。
. net Framework, . net Core, Xamarin被统一为一个。net 6框架,所以不需要。net标准。. net标准的目标是拥有一个能在所有框架中工作的库。现在所有的框架都合并到了。net 6中。
. net标准的存在主要是为了改进代码共享,并使每个. net实现中可用的api更加一致。
在创建库时,我们可以将目标设置为。net Standard 2.0,这样所创建的库就可以兼容不同版本的。net Framework,包括。net Core、Mono等等。