·来源于唐老狮的视频教学,仅作记录和感悟记录,方便日后复习或者查找
一.什么是.Net
.Net是指微软一整套技术体系的统称与代号
包含的内容有:
- 框架体系:.Net Frameword, .Net Core, Mono
- 开发语言:C#,VB,F#等(其中C#是主推的主流语言)
- 开发工具:VS,VScode等
做这一套体系的目的:
- ①实现跨语言:只要是面向.Net平台的编程语言(C#,F#,C++,VB)用其中一种语言编写的程序可以无缝切换到另一个应用程序中
- ②实现跨平台:只要一次编译,就可以把应用程序不经代码修改地运行在任意有.Net框架实现的操作系统上。(即代码不依赖于操作系统和硬件设备)
(搞垄断,希望大家都统一用他家的产品和开发工具与框架)
二..Net跨语言的实现
如何实现的跨语言:
- CLS(Common Language Specification):公共语言规范。参考每种语言的共性定义出的一套规则。只要开发者都遵守这个规则来进行编码,那么代码就能够被任意.Net平台支持的语言所通用,即可以通过不同的编程语言(C#,VB,J#等)来创建应用程序。【对于普通开发者】
- CTS(Common Type System):公共类型系统。设计面向.Net语言的时候要遵守的规范体系。CLS是CTS的子级。如果一个语言它支持CTS,那么它就是面向.Net平台的语言。【对于要设计面向.Net的语言的开发者】
- CLI(Common Language Infrastructure):公共语言基础。是微软将CTS等内容提交给国际组织计算机制造联合会ECMA的一个工业标准。
总结:
为了实现跨语言,微软制定了上述的一些列规范。
只要语言遵守.Net的规范,那这个语言就可以和其他面向.Net的语言之间实现跨语言操作。即可以在.Net平台下开发应用程序。
CLI包含CTS,是微软把CTS提交给国际组织的一个工业标准
三..Net跨平台的实现
我们可以看出来,.Net的跨语言实现是让所有需要在.Net平台上进行开发的语言遵守CLI标准。
不过在早期的.Net中其实是指支持Windows平台的,也就是只能够让不同的语言共同去开发windows程序。而实现了的跨平台功能就和.Net Frameword,.Net Core,以及Mono是有关的
1..Net Framework
定义:.Net Framework是一个开发框架。可以快速开发部署网站父物和应用程序。它是Windows中的一个组件。部分开源。主要用于开发Windows下的应用程序
包含:
- ①公共语言运行时(Common Language Runtime, CLR)
- ②虚拟执行系统
- ③.Net Framework类库等
体系结构:
制作应用程序
基于CLS的开发语言 + 各种类库 = 可以在CLR上编译为机器码的程序集
①只要支持CLS的语言都可以用于开发Windows下的应用程序
②BCL(基础类库)和FCL(框架类库)是这个框架体系中为我们提供的各种API
③程序集的表现是.dll或者.exe格式的文件,其中最为关键的信息是:
- PE头,CLR头(就是一些程序的格式信息,比如入口方法,版本号等)
- CIL代码(通用中间代码):是介于源代码和机器码之间的代码,可以通过CLR产生机器码(总之就是会把所有不同语言经过转化后得到的统一规范的中间代码)
让应用程序在操作系统上运行
CLR(Common Language Runtime):是公共语言运行时
- 它是.Net Framework的基础,所有.Net技术都建立在此之上。
- 它提供内存管理,线程管理等服务。看起来和虚拟机一样,因此又被称为.Net虚拟机
因此如果想要应用程序能够在目标操作系统上运行,就需要使用.Net提供的CLR环境来支持,即必须在操作系统上安装.Net Framework
它会把程序集中的IL(中间代码)翻译成最终在操作系统上执行的机器码
总结:
.Net Framework是一个能够支持在Windows平台下进行跨语言开发应用程序的的框架结构。它部分开源。但是它不支持跨平台开发
2..Net Core
定义:.Net Core是2016年推出的.Net Framework的新一代版本。类似.Net Framework的兄弟
- 它是.Net Framework的翻版实现,是一个开源项目
- 它是基于.Net Framework来进行设计的主要目的就是跨平台
- 它是.Net技术框架在Windows,Mac OS,类Linux系统下的具体实现
原理:给不同的操作系统都实现相应的CLR(.Net虚拟机)。这样在不同平台上就都可以通过CLR进行跨语言开发。同时又实现了跨平台的特性
.Net Framework诞生于2002年,.Net Core诞生于2016年,中间14年的空窗期的跨平台实现主要由Mono来负责
3..Mono
说明:Mono是一个Xamarin公司(已被微软收购)赞助的开源项目。
- 它基于.Net的CLI(公共语言基础)提供了对.Net Framework的另一种实现。
- 它和.Net Framework的区别是具备跨平台能力【可以在Windows,Mac OS, Linux操作系统,PS3,XBOX,Wii等主机平台上运行】
- 它1.0版本出现于2004年
原理:
①利用.Net平台制定的CLI把很多语言编译成通用规范的CIL公共中间语言
②再利用CLR公共语言运行时转化为对应操作系统的原生代码
(这套规则是在.Net Framework的基础上进行的修改与添加)
老实说它这个原理和.Net Core看起来很像的
四.总结
①.Net是微软旗下一系列开发框架,开发语言,开发工具的产品代号。
②对于跨语言的实现,主要通过让语言遵守CLI标准,即可让该语言成为面向.Net的语言。从而使得该语言开发的应用程序能够被编译为统一规范标准的通用中间语言CIL。并通过CLR通用语言运行时(.Net虚拟机)去把CIL转化为操作系统可执行的机器码(典型的是.Net Framework框架把CIL转化为Windows操作系统下的可执行机器码)
③对于跨平台的实现,主要是通过.Net Core和Mono这两个完全开源的框架实现的。
④.Net Core是.Net Famework的翻版实现,它最大的特点是在不同的平台上实现了对应的CLR(.NET 虚拟机)从而让应用程序能够在不同平台上被编译执行
⑤Mono是一个很早(2004年)的开源项目,是对.Net Framework的修改与添加,它是通过利用CLI对.Net Framework进行了另一种实现的框架。它利用CLI把不同语言编译成统一规范的CIL,然后再利用CLR转化为对应操作系统上可执行的机器码
⑥Mono 使用同一套运行时代码,.NET Core 为每个目标平台(Windows、Linux、macOS)独立实现了一套完整的运行时(CoreCLR)