1.操作系统:最下层的无疑就是操作系统了。
2.CLR在.NET框架中,运行于底层的是公共语言运行时(CLR),它是公共语言基础设施(CLI(CTS+CLS))的一个实现。
3.FCL在CLR之上,.NET框架提供了全面、丰富的框架类库(FCL),这些类库通过CLR调用操作系统的API实现各种功能。框架类库致力于让开发者通过.NET平台编写各种各样的应用程序,并调用微软的其他产品。这些类库中,一些基础的类组成基础类库(BCL)。
3.语言在类库之上,.NET框架的各种语言共同实现了公共语言规范(CLS)。甲骨文公司的JavaEE是.NET平台的竞争对手之一。.NET框架的最新版本是4.8(截至2019年底)。
【.NET发展史】
截至到现在,C#和.NET平台已经分别有了21和19年的历史。我们简单回顾一下.NET平台的发展历史,它对于我们更好地了解.NET平台有着重要的意义。
2002年:.NET1.0
在.NET出现之前,编写Windows上可以运行的程序就要直接和COM(微软的一套软件的接口标准)打交道。.NET框架试图通过CLR代替COM,并提供更多功能,令用户可以更轻松的使用Windows的资源进行软件开发。
相应地VisualStudio也升级到7,称为VisualStudio2002(上一个版本叫做VisualStudio6)。
该框架包括C#和VB.NET(VisualBasic的继任者)。
同时,第一个版本的ASP.NET也在.NETFramework1.0亮相,它作为网站的解决方案,一直是.NET框架最重要的产品线之一。
2005年:.NET2.0
2005年11月,.NETFramework2.0发布。该框架包括C#2,相比第一代添加了新的语法特性,其中最重要的就是泛型。
与此同时,CLR的版本也相应更新为2.0,VisualStudio也升级到VisualStudio2005。
.NETFramework2.0中,Web应用解决方案仍然是ASP.NETWebForm,但新增了多种多样WebService,包括.NETRemoting(TCP/HTTP/Pipelinecommunication)以及基础的Winsock等。
WindowsForm则作为Windows下的应用程序解决方案。
ADO.NET则作为数据库连接方案(支持SQLServer和Oracle)
2007年:.NET3.0,WCF+WPF+WF.NET3.0是.NET框架最重大的一个更新,包括三大产品线:WCF:统一了过去Web服务混乱的形式,形成了一个统一的格式。WPF:作为前端用户界面的解决方案,包括Silverlight。WF:提供工作流的管理。
.NET3.0标志着Windows平台开始全面转向.NET时代(以后所有版本的Windows都预装.NET)。而在这之前,只有服务器版本的Windows会预装.NET。
当时的.NET只能在Windows上运行,通过CLR调用Windows的API,从而控制电脑硬件。.NET3.0的CLR和.NET2.0相同。
2008年:.NET3.5,C#3(LINQ)与EntityFramework.NET3.5集成了C#3,包括C#3最重要的一个功能,即LINQ。相应地,为了支持LINQ,此版本也加入了扩展方法、Lambda表达式等新功能。
从C#3开始,C#不再是Java的一个跟班小弟,某种意义上实现了对Java的超越(Java直到2014年才在Java8加入了Lambda表达式)。
另外,.NET3.5SP1新增了ADO.NETEntityFramework取代ADO.NET,作为ORM的解决方案。在ADO.NETEntityFramework发表之前,NHibemate是在.NETFramework上经常使用的ORM实现,顾名思义,它是Hibernate在.NETFramework上的实现。
相应地,VisualStudio也升级到了VisualStudio2008。
2010年:.NET4.0和C#4.NET4.0集成了C#4,主要增加了动态语言运行时(DLR)和任务并行库(TPL),它包括PLINQ、任务等,优化了多线程的编程方式。
CLR由2直接升级到4。
相应地,VisualStudio也升级到了VisualStudio2010。
2012年:.NET4.5和C#5.NET4.5和C#5—起发布,.NET4.5框架的生态系统如下图所示。.NET4.5框架的生态系统
C#5基本上全部都是围绕async/await关键字的。
ASP.NETMVC作为ASP.NET的一组类库,于2009年初次发布,最新的版本是ASP.NETMVC5.2。
WebService也在不断进化,从基于XML的WCF发展到RESTful的WebAPI。
从图中可以看到,最上面的应用层,ASP.NET茁壮成长,继续和PHP/JSP等技术分庭抗礼,用户有WebForm和MVC可供选择。在JS方面,选择了jQuery作为官方JS。值得注意的是,MVC中的M由ADO.NETEntityFramework负责。
Windows下的解决方案仍然是WPF。中间的服务和数据层中,Web服务拥抱RESTful,数据库方面也是由ADO.NETEntityFramework唱主角。
最下面当然就是基础类库(BCL)。在C#5中,增加了对异步编程的简化。
相应地,VisualStudio也升级到了VisualStudio2012。在这之后,.NET还有更高的版本4.6和4.7,对应VisualStudio2015和VisualStudio2017。
2016年:.NETCore的问世.NETCore是.NETFramework的新一代版本,也是另外一种实现方式,是微软开发的第一个跨平台的(Windows、MacOSX、Linux)、开源的、模块化的应用程序开发框架。
.NETCore并不算是.NETFramework的继任者,而更像是它的兄弟,所以,现在它们两个各有自己的版本编号。
未来.NETFramework和.NETCore也将会是各自发展,但它们也会同时使用彼此的功能。
.NETCore和.NETFramework共用一部分底层功能(例如一些BCL),参见下图。
.NETCore和.NETFramework之间的关系
与.NETFramework不同的是,.NETCore采用组件化的管理方式,应用程序只需要通过nuget获取需要的组件即可,与.NETFramework一上来就全部安装的做法不同。
.NETCore的应用层包括UWP,用于开发Windows商店应用(部署到任何支持Win10的设备上,例如XBox,智能手机甚至眼镜),和ASP.NETCore,用于开发网站应用(通常展现为微服务的形式)。
中间则是CoreFX,它是.NETCore的基础类库,础类库BCL。
底层则实现两种运行时,CoreRT和CoreCLR。CoreRT将C#或VB.NET代码直接转换为机器码运行在宿主机器上,在不同的平台上,会使用不同的技术(Windows上使用的是.NETNative,MacOS与Linux上使用的是LLILC)。
而CoreCLR就是.NETFrameworkCLR的移植,它包括一个全新的JIT编译器——RyuJIT,依据微软的测试报告,该JIT的性能比旧版本提升了约25%。
由于.NETCore更佳的跨平台表现,越来越多的网络应用使用ASP.NETCore来编写。
合作咨询market@dtstack.com
总部地址杭州市余杭区五常街道阿里巴巴数字生态创新园4号楼袋鼠云