.NET是一个由微软提供的统一平台,特点是免费、开源和跨平台,用于构建和运行各种类型的应用程序。什么是.NET开发平台?简单来说,开发平台就是为应用软件开发提供的一个工作平台,主要包括CLR(Common Languge Runtime,公共语言运行时)和FCL(Framework Class Library,框架类库)。其中,FCL包含BCL(Base Class Library,基础类库)和.NET Core、ADO.NET、WPF、WinForm等框架类库。
.NET不等同于.NET Framework或.NET Core。.NET是开发平台,.NET Framework是在.NET平台上针对Windows系统实现的开发框架,.NET Core是在.NET平台上实现的支持多操作系统的跨平台开发框架。
.NET的开源协议是MIT,跨平台特性使得它可以运行于任何环境,如Windows、Linux、macOS、iOS、watchOS和Docker等。
.NET的另一个特点是大生态,支持Web、桌面客户端、移动应用、微服务、云服务、机器学习、游戏、物联网等领域,几乎涵盖了所有的应用场景,如图2-1所示。
也就是说,我们只需要掌握C#一门计算机编程语言,就可以应对几乎所有应用场景的开发。这一优势是目前其他平台无法比拟的。其中部分生态目前相对还不成熟,比如机器学习和大数据方面。随着.NET生态的发展壮大,.NET也会迎来越来越美好的前景。
图2-1 .NET生态应用全景图
.NET是一个支持多种编程语言的平台,包括Visual Basic.NET、F#以及C#等编程语言。
(1)Visual Basic.NET
Visual Basic.NET简称VB.NET,是一种接近人类语言的计算机编程语言,它的编程思想是基于事件驱动的,语法简单易学。
(2)F#
F#是一种跨平台开源的函数式编程语言,包括面向对象和命令式编程。函数式编程在某些场景下比面向对象编程更方便、高效,是对.NET平台的一个有益补充。
(3)C#
C#是一种简单、现代、面向对象和类型安全的编程语言,其名字的意义源于C++,并受到了五线谱中的升号“#”的启发。它在C++的基础上再加上++,就是4个“+”,即#,恰好和五线谱中的#(sharp)一样。因此,C#读作[si:'ʃɑrp]。C#是微软为.NET平台定制的编程语言,从源头设计上保证了C#与.NET Framework的完美融合。
表2-1展示了C#、.NET Framework、Visual Studio三者之间的对应关系。
表2-1 C#、.NET Framework、Visual Studio三者之间的对应关系
(续)
.NET Framework是一个由微软设计和开发的软件框架,主要用于开发可以在Windows平台上运行的应用程序,例如Web、Windows和移动端的各种应用程序。.NET Framework主要由CLR和BCL两部分组成。.NET Framework的基本结构如图2-2所示。
图2-2 .NET Framework的基本结构
微软在2001年初发布.NET Framework正式版v1.0,于2003年升级到v1.1,完善了桌面应用开发和Web开发,开始推出ASP.NET Web编程框架。2006年左右,微软相继推出了.NET Framework的2.0和3.0版本。在3.0版本中,微软推出了WPC、WCF、WF等框架。随着3.0的问世,微软进入黄金时代,占领了一大半开发市场。
不过好景不长,在短短几年后的2009年,开发市场风起云涌,Web开发大行其道,Java、PHP崛起。微软先前打下的江山开始迅速被开源的Java、PHP等瓜分。为了夺回失去的Web开发市场,微软在2009年发布了Web框架.NET MVC 1.0并完全开源,并在随后的几年不断完善。
2010年至2014年,虽然.NET Framework从4.0升级到4.5,.NET MVC框架也在不断升级,但是期间不仅没有夺回We b开发市场,反而还在继续失守。
2015年,微软开发了一款全新的跨平台产品.NET Core并完全开源,2016年正式推出.NET Core 1.0。2019年,.NET Core 3.0发布,这个版本代表.NET Core已经稳定,且它的生态圈和社区也发展得非常成熟。
.NET Core是一个开源通用的开发框架,支持跨平台,即支持在Windows、macOS、Linux等系统上的开发和部署,并且可以在硬件设备、云服务和嵌入式/物联网方案中使用。.NET Core的源码放在GitHub上,由微软官方和社区共同支持。
.NET Core是由Core CLR、BCL等组件构成的,架构如图2-3所示。
图2-3 .NET Core架构
(1)Core CLR
Core CLR即.NET运行时,如之前所说,Core CLR与.NET Framework的CLR并没有什么区别,进程管理、垃圾回收(Garbage Collect,GC)管理、JIT(Just In Time,即时)编译器等部分也都是一样的,只是针对服务器系统做了相应优化。Core CLR一直在同步更新,可以肯定的是,Core CLR才是.NET的未来。
(2)BCL
BCL包括集合类、文件系统处理类、XML(eXtensible Markup Language,可扩展标记语言)处理类、异步Ta s k类等。
.NET Core部署运行时不再由IIS工作的进程w3wp.exe托管,而是使用自托管Kestrel服务器运行,IIS作为反向代理的角色由AspNetCoreModule模块负责转发请求到Kestrel不同端口的ASP.NET Core程序中,随后就将接收到的请求推送至中间件管道中,处理完该请求和相关业务逻辑之后再将HTTP响应数据重新回写到IIS中,最终响应输送到浏览器、App等客户端。整体流程如图2-4所示。
图2-4 .NET Core处理请求流程