微软的 .Net 既不是编程语言也不是框架,是类似于互联网时代、次时代、21世纪、信息时代之类的宣传口号
它是一整套技术体系的统称,或者说它是微软提供的技术平台的代号。包含的内容有:
框架体系:
开发语言:
开发工具:
可以简单理解 .Net 本质上就是微软为自己的一系列产品取的一个代号
.Net 平台诞生的意义:
跨语言
只要是面向 .NET 平台的编程语言(C#、VB、C++、F# 等等),用其中一种语言编写的内容可以无缝地用在另一种语言编写的应用程序中
跨平台
一次编译,不需要任何代码修改,应用程序就可以运行在任意有 .NET 框架实现的操作系统上,即代码不依赖于操作系统,也不依赖硬件环境
公共语言规范 CLS(Common Language Specification)
.Net 专门参考每种语言并找出了语言间的共性,定义了一组规则,即一组语言互操作的标准规范。
只要开发者都遵守这个规则来编码,那么代码就能被任意 .Net 平台支持的语言所通用,即可以通过不同的编程语言(C#、VB、J# 等等)来创建应用程序。
公共类型系统 CTS(Common Type System)
需要设计面向 .Net 的语言时需遵循的体系,是公共类型系统 CTS 的子集。
编程语言如果能支持 CTS,那么称其为面向 .NET 平台的语言 。
公共语言基础结构 CLI(Common Language Infrastructure)
微软将 CTS 等内容提交给国际组织计算机制造联合会 ECMA 的一个工业标准。
小结:
.Net 的跨语言是让各种语言支持 .Net 的规范 CLI(也就是 CTS 等规范)。
早期的.Net系列产品主要是为了给Windows操作系统服务的,并没有跨平台的特性。
即使跨语言了,也只是可以使用多语言开发 Windows 上的应用程序。
.NET Framework 是一个可以快速开发、部署网站服务及应用程序的开发框架,在 2002 年推出 1.0 版本。
.NET Framework 是 Windows 中的一个组件,部分开源,主要用于开发 Windows 下应用程序。包括:
公共语言运行时(Common Language Runtime, CLR)
虚拟执行系统
.NET Framework 类库等
步骤一:制作应用程序(编程语言 + 调用各种类库进行开发,生成程序集)
只要支持 CLS 公共语言规范的语言,都可以用于开发 Windows 下的各种应用程序和网站程序。
BCL(基础类库)和 FCL(框架类库)是这个框架体系中为我们实现好的各种 API。
程序集的表现就是后缀为 .dll 或者 .exe 格式的文件。其中包含的最关键信息:
步骤二:让应用程序在操作系统上运行
CLR(Common Language Runtime)公共语言运行时是 .Net Framework 的基础,所有的.Net技术都是建立在此之上的。
它是一个在执行时管理代码的代码,提供内存管理、线程管理等等核心服务,类似一个小型的操作系统一样,所以形象的把它称为“.Net虚拟机” 。
如果想要应用程序在目标操作系统上能够运行,就必须依靠 .Net 提供的 CLR 环境来支持,那就必须在操作系统上安装 .Net Framework。
它会把程序集中的 IL(中间代码)翻译成机器码最终在操作系统上运行。
小结:
.Net Framework 是一个主要用于跨语言开发、Windows 操作系统下的应用程序的框架结构,不支持跨平台。
.Net Core 是 2016 年推出的 .Net Framework 的新一代版本,是.Net Framework的兄弟,是.Net Framework的翻版实现,它是一个开源项目。
它基于 .Net Framework 来进行设计,主要目的是跨平台,是 .Net 技术框架组成在 Windows、MacOS、类 Linux 系统下的具体实现。
原理:
为不同的操作系统实现对应的 CLR 公共语言运行时(.Net 虚拟机),使得在不同的平台上能够将 IL(中间代码)翻译成机器码,最终在操作系统上运行。
Mono 是一个由 Xamarin 公司(已被微软收购)所赞助的开源项目。
它基于 .Net 的CLI(Common Language Infrastructure)公共语言基础结构,提供了微软 .Net FrameWork 的另一种实现。
它相对 .Net FrameWork 最大的区别就是具备跨平台的能力,不仅可以运行在Windows、MacOS、Linux 等操作系统,甚至还可以运行在 PS3、XBOX、Wii 等主机平台上。
Mono 的 1.0 版本出现在 2004 年,也就是说在 .Net Core 出现之前,Mono 是 .Net 平台实现跨平台的唯一选择。
原理:
Mono 利用 .Net 平台制定的 CLI 公共语言基础结构规则,将多种语言编译成通用规范的 CIL 公共中间语言,再利用 CLR 公共语言运行时,将 CIL 公共中间语言转换为操作系统的原生代码(主要做的就是在各种操作系统上实现了对应的 CLR 内容),这样用各种不同语言编写的逻辑就能够在指定操作系统上运行。
Mono 的规则是在 .Net Framework 规则上进行修改和添加的。
.Net Framework(2002 年发布):
部分开源,主要用于开发 Windows 平台下应用,包含 Windows 平台的所有特性。
.Net Core(2016 年发布):
完全开源,可以针对多个平台开发应用,包含 .Net Framework 部分特性。
Mono(2004 年发布):
完全开源,早期乃至现在也是 .Net 的跨平台解决方案。
总体而言,在 .Net Core 出现之前开发者都通过 Mono 来实现 .Net 的跨平台。
使用基于 .Net 平台的 Mono 开发,能够发布可以在主流的各种操作系统上运行的应用程序。