.NET Core之为什么能跨平台?
.NET Framework的几个层次结构
一、CLR公共语言运行时
二、FCL框架类库
三、另一种方式
非Windows下的.NET
什么是CLI?
CLI总结
.NET Core 跨平台
全新的CLR之CoreCLR
全新的CLR之CoreFX
总结
.NET Framework的几个层次结构
.NET Framework基本上可以分为两大层次:
提供运行环境的CLR(Common Language Runtime)公共语言运行时。
为开发人员提供给的API FCL(Framework Class Library)框架类库。
如下图所示:
在这里插入图片描述
一、CLR公共语言运行时
CLR的作用是为程序的执行提供了一个托管的执行环境,他是.NET Framework的执行引擎,为托管程序的执行提供了内存分配、垃圾回收、安全控制、异常处理和多线程管理方面的服务。
CLR是.NET Framework的一个子集,但是两者缺对立了不同的版本。微软截至目前发布了4个版本的CLR:1.0、1.1、2.0、4.0;.NET Framework的1.0和1.1采用的是CLR的1.0和1.1,.NET Framework的2.0和3.x使用的CLR 2.0,.NET Framework 4.x均使用的CLR 4.0。
二、FCL框架类库
FCL是一个为开发人员提供API的类库,它提供的API类库可以分为两个层次:
面向具体应用类型的API,主要有以下三种类型应用:
① 面向应用(比如ASP.NET、WPF和Windows Forms等)
② 面向服务(比如WCF、WF和Data Services等)
③ 面向数据(比如ADO.NET、Entity Framework和LinQ to SQL等)
处于最底层的BCL(Basic Class Library)基础类型类库。
BCL主要用于描述了一些基本的数据类型和数据结构(比如字符串、数字、日期/时间和集合等等)、提供些基础的操作(比如IO、诊断、反射、文本编辑、安全控制、多线程管理等等)。
三、另一种方式
我们可以将FCL的面向应用或者服务类型(比如Windows Forms、WPF、ASP.NET和WCF等)的部分分成AppModel,那么.NET Framework的整体架构可以如下图所示:
在这里插入图片描述
非Windows下的.NET
.NET是通过Mono和Xamarin将其伸展到其他的平台(Linux、Mac、Andriod等)
什么是CLI?
.NET 跨平台其实建立在一个开放的标准或者规范当中,而这个规范就叫做CLI(Common Language Infrastucture)。CLI其实解决的就是:由不同的编程语言开发的.NET应用能够无需任何更改就能运行在不同的系统环境之中。解决这个问题就涉及到了【编程语言的差异】和【运行时环境差异】,编程语言能够相互兼容,运行时环境能够得到统一,跨平台就能得到实现。
CLI(Common Language Infrastucture)分为【Common Language】和 【Infrastucture】
Common Language其实是一种通用语言,为的就是解决编程语言的兼容性问题。
Infrastucture其实是动态执行应用的引擎。
所以CLI就为可执行代码和引擎提供了一个标准。
编程语言有解释型和编译型之分。编译型则需要编译器生成可执行代码,Common Language其实是编译型语言。想要真正实现跨平台,最终目的就是解决可执行代码在不同平台的兼容性与可移植性,但是应用的兼容性和可移植性是编译后结果决定的。如果能将不同的编程语言通过编译器编译成符合标准代码,那么就能解决编程语言之间的差异。
按照CLI标准的规定,可执行代码称为CIL(Common Intermediate Language)的语言,是一种介于编程语言和机器语言之间的中间语言,也是一门OOP语言。
不同编程语言可以通过编译器得到统一,而运行环境则可以通过虚拟机技术解决。虚拟机是CIL的运行容器,它能够在CIL执行的时候动态的将他翻译成与当前环境完全匹配的机器指令。而CIL就是一种虚拟机语言。
CLI总结
由此可见 .NET建立在CLI这一标准之上,所以天生就具备了“跨平台”的基因。
.NET Core 跨平台
要真正实现.NET 的跨平台,主要需要解决两个问题:
一是针对不同的平台设计相应的CLR运行时为中间语言CIL提供一个一致性的执行环境
二是提供统一的BCL以彻底解决代码复用的难题
对于真正跨平台的.NET Core来说,微软不仅为它设计了针对不同平台被成为CoreCLR的运行时,同时还重新设计了一套被称为CoreFX的BCL
NET Core目前支持的AppModel支持有两种,一是.NET Core用于开发服务器Web应用和服务;二是UWP(Universal Windows Platform)用于开发能够在各种客户端设备上自适应的Windows 10应用。
全新的CLR之CoreCLR
这些模块对应这一个单一的程序集,并最终由对应的NuGet包来分发。至于底层的虚拟机,微软则为主流的操作系统和处理架构设计了针对性的运行时就是 CoreCLR
全新的CLR之CoreFX
CoreFX是经过完全重写的BCL,除了自身就具有跨平台执行的能力之外,其提供的API也不再是统一定义在少数几个单一的程序集中,而是经过有效分组之后被定义在各自独立的模块中
总结
作为运行时的CoreCLR和提供BCL的CoreFX是.NET Core两根重要的基石。.NET 能够成长为跨平台的.NET Core 他们是主力军,CoreCLR运行时为.NET Core应用提供了不同平台不同的执行环境;CoreFX为.NET Core提供了彻底解决代码复用的难题。
————————————————
版权声明:本文为CSDN博主「以燃」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_33812534/article/details/109811115
相关文章
- 02-19.Net Core 2.0+ InfluxDB+Grafana+App Metrics 实现跨平台的实时性能监控
- 02-19.Net Core跨平台应用研究-HelloDDNS(动态域名篇)
- 02-19.NET Core是.NET的跨平台版本,用于构建网站,服务和控制台应用程序。.NET Framework
- 02-19.NET Core 构建跨平台的桌面应用
- 02-19Mac/Windows开发跨平台.NET Core 控制台程序
- 02-19.NET跨平台之旅:在Linux上以本地机器码(native)运行ASP.NET Core站点
- 02-19.NET跨平台之旅:生产环境中第2个跑在Linux上的ASP.NET Core站点
- 02-19《ASP.NET Core跨平台开发从入门到实战》Web API自定义格式化protobuf
- 02-19.NET Core跨平台:使用.NET Core开发一个初心源商城总括
- 02-19.NET跨平台之旅:在生产环境中上线第一个运行于Linux上的ASP.NET Core站点