深入浅出:.NET框架设计与实现
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 .NET框架简介

当提到.NET时,有的读者可能会想到.NET Framework。很多读者隐约记得类似于WebForms、WCF、Remoting等传统的.NET Framework(.NET框架),它们与Windows深度绑定,因此,一度跟随Windows获得了飞速的发展。

但时代已悄然改变,跨平台已经成为当今开发语言环境的一大基本要求,.NET Framework的时代已经一去不复返,昔日只能在Windows上运行的.NET Framework已经成为明日黄花。从2014年的.NET Core开始,.NET已经彻底走向了跨平台和开源,不仅如此,自.NET Core开始,.NET已经越来越强大,发展成目前能够同时在Windows、Linux、Mac、iOS、Android等多平台上运行的统一平台。

1.1.1 .NET Core简介

.NET Core是.NET技术走向开源的一个象征,是衍生自.NET Framework的新一代.NET框架。与.NET Framework相比,开源、跨平台是.NET Core的显著特点。Microsoft也将整个.NET Core交给.NET基金会进行管理,.NET Core已经成为该基金会管理的主要开源项目之一。

.NET Core于2014年11月12日公布,并于2016年发布.NET Core 1.0版本。.NET Core是.NET Framework的下一个版本。

.NET Core支持的语言包括C#、F#、Visual Basic.NET和C++/CLI,具有Windows和macOS安装程序,以及Linux安装包和Docker镜像。

.NET Core具有许多优点,下面列举其中的几个。

• 跨平台:可以在Windows、Linux和macOS上运行。

• 跨体系架构一致性:支持多种架构体系(如x64、x86和ARM)。

• 命令行工具:.NET Core所有的运行脚本都可以通过命令行工具执行。

• 部署灵活:多样化与灵活性的部署方式。

• 兼容:.NET Core通过.NET Standard与.NET Framework、Xamarin和Mono兼容。

• 开源:.NET Core是开源的,使用MIT许可证。另外,.NET Core是.NET Foundation(.NET基金会)项目。

• 扩展性:.NET Core是一个模块化、轻量级,以及具有灵活性和深度扩展性的框架。

.NET Core包括.NET编译器平台Roslyn、.NET Core运行时CoreCLR、.NET Core框架CoreFX和ASP.NET Core。由于ASP.NET Core是.NET Core SDK的一部分,因此无须单独安装。.NET Core组件如图1-1所示。

图1-1 .NET Core组件

.NET Core 3.1之前的版本一直采用.NET Core这个名称,而.NET Core 3.1后续的版本直接被命名为.NET 5。为了避免与.NET Framework的版本号发生冲突,它跳过了版本号4,而.NET Core也完成了它的使命,成为一个历史名词。

.NET又分为.NET运行时(.NET Runtime)和.NET SDK(Software Development Kit,软件开发工具包)。.NET运行时的安装包的体积比较小,仅包含运行时的相关资源,可以作为部署生产环境时的基础组件,.NET应用程序必须依赖它才能运行。而.NET SDK不仅包含.NET运行时的相关资源,还包含开发应用程序时所依赖的相关资源。如果要开发.NET应用程序,则需要安装.NET SDK。

.NET的产品路线图如图1-2所示,由此可知,未来每年都会发布新版本的.NET。

图1-2 .NET的产品路线图

1.1.2 .NET Standard简介

.NET Standard(.NET标准)的原称为.NET平台标准(.NET Platform Standard)。.NET Standard适用于所有.NET实现的API,主要用于统一平台,是一种可用于.NET Core、Xamarin和.NET Framework的可移植库。也就是说,.NET Standard是一个基础类库。.NET Standard支持的技术广泛,如支持.NET Framework、.NET Core及后续的.NET版本、MAUI(前身为由Mono基金会推出的Xamarin,后被Microsoft收购,并且MAUI支持使用C#开发Android、iOS等移动端的原生应用)和Unity等,并且包含基础类库,如集合类、I/O、网络、数据访问API、线程API等。

.NET Standard,顾名思义,是一个标准,不包含具体的实现。.NET Standard定义了一套标准的接口,通过这一套标准的接口的设计,反而促成了一个意想不到的结果,即.NET Core的诞生。

.NET平台由.NET Framework、.NET Core和Xamarin这三大技术分支组成,如图1-3所示。

图1-3 .NET平台的三大技术分支

如图1-3所示,每个技术分支都具有一个基础库(Base Library)。为了解决代码复用的问题,推出了一个统一的基础类库,这个统一的基础类库称为.NET Standard。图1-4所示为.NET Standard的布局,.NET Standard为.NET Framework、.NET Core和Xamarin提供了统一的API,这个统一的API可以被所有类型的应用程序做代码复用。

图1-4 .NET Standard布局

.NET Standard提供的API随着版本而丰富。另外,.NET Standard也是PCL(Portable Class Library,可移植类库)的替代品。开发人员可以通过.NET Standard来开发支持多平台的应用程序,如图1-5所示,不同的框架版本对应不同的.NET Standard版本。

图1-5 不同的框架版本对应不同的.NET Standard版本

注意:.NET Standard具有多个版本,每个新的版本支持的API都会增加一些。.NET Standard的版本越新支持的API就越多(但这也意味着旧版本的.NET Standard支持的API少),同时可以兼容的旧版本也就越多。

开发人员可以创建基于.NET Standard的类库项目,并且将该类库项目的目标框架(TargetFramework属性)定义为netstandard{version},如代码1-1所示。

代码1-1

目前,.NET Standard的最新版本为2.1,并且已经存档,未来将不再发布新版本的.NET Standard,但.NET 5、.NET 6及所有将来的版本将继续支持.NET Standard 2.1及更早的版本。.NET Standard不仅不会成为历史名词,还将继续成为众多.NET家族成员之间赖以共享的底层标准。