目录
.Net是什么
- 开发工具:Visual Studio、Visual Studio Code。
.Net跨语言的实现
CLS
CTS
CLI
跨语言如何实现
.Net跨平台的实现
.NetFramework
Mono
.NetCore
跨平台如何实现
.Net是什么
- .NET 不是编程语言,也不是框架;是一整套技术体系/平台的统称或代号。
- 包含内容:
- 框架体系:.NET Framework、.NET Core、Mono;
- 开发语言:C#、VB、F#(C# 为主推);
- 开发工具:Visual Studio、Visual Studio Code。
平台目标
- 跨语言:不同 .NET 平台上的语言可无缝互操作。
- 跨平台:一次编译,应用可在任意有 .NET 框架实现的操作系统上运行。
.Net跨语言的实现
在了解 .Net 如何实现跨语言之前要先了解三个概念,分别是CLS、CTS、CLI;
注意,一般我们所说的 .Net 平台的跨语言都是指面向 .Net 平台设计的语言,C#、VB.NET、F#类似这些语言中进行的。
CLS
- CLS(Common Language Specification,公共语言规范);微软在总结多种语言共性后提出的一组语言互操作规则;只要公开API遵守CLS,不同 .NET 语言即可互相调用;
- 并不是“全世界所有语言的通用规则”。它只定义在 .NET 平台内部,为了让面向 .NET 的语言(比如 C#、VB.NET、F# 等)能够互操作而设立的一组规则,如果一门语言不是针对 .NET 平台设计的,那么它不会去遵循 CLS。
CTS
- CTS(Common Type System,公共类型系统);当你需要设计面向 .Net 的语言时需要遵循一个体系,这个体系就是CTS,刚才提到的CLS公共语言规范就是是CTS公共类型系统的子级
- 消除“各语言类型体系不一致”带来的互操作障碍,确保所有 .NET 语言在类型与成员语义上说同一种“类型语言”
- 一个编程语言,如果它能够支持CTS,那么我们就称它为面向 .NET 平台的语言
CLI
- CLI(Common Language Infrastructure,公共语言基础结构);
- 微软提交给 ECMA 的工业标准,对 .NET 的关键组成(含 CTS 等)进行标准化;可理解为“让 .NET 语言与实现具备共同语义的标准底座”,以标准形式明确语言互操作与类型系统等基础规则,使不同实现(如 .NET Framework、Mono、.NET Core/现代 .NET)有统一的规范依据。
跨语言如何实现
- 微软为了实现跨语言,制定了一些规范,只要一门语言支持CTS(公共类型系统)的规则,那么我们就能够使用它在 .Net 平台下开发应用程序;
- CLS(公共语言规范)是CTS的一个子级,是一组语言互操作的标准规范,我们经常可以看到的CLI公共语言基础结构,它包含CTS公共类型系统,它是微软将CTS等内容提交给国际组织计算机制造联合会ECMA的一个工业标准

.Net跨平台的实现
早期的 .NET(.NET Framework,2002)只服务于 Windows,它解决了跨语言的问题,但是并没有解决跨平台的问题,如果要让同一份 .NET 程序跑在不同操作系统,必须为不同平台实现对应的 CLR(公共语言运行时),那么这就涉及到以下三个核心的概念:
.NetFramework
- 定位:是一个可以快速开发、部署网站服务及应用程序的开发框架,是 Windows 中的一个组件,部分开源,主要用于开发Windows下应用程序;
- 特点:包含 CLR:负责内存、线程管理,将 IL 翻译为 Windows下的 机器码;
- 局限:只能在 Windows 上运行,不跨平台。
Mono
- 定位:.NET Framework 的第三方替代实现,由Xamarin主导,遵循CLI;
- 特点:在不同操作系统实现对应 CLR,将语言生成的IL中间代码在不同操作系统下的CLR再翻译为机器码,使得实现跨平台,这是社区的实现
- 意义:在 .NET Core 出现之前,Mono 是唯一的跨平台方案,Unity早期使用它作为脚本运行时。
.NetCore
- 定位:新一代 .NET,目标就是跨平台,
- 特点:完全开源,为不同 OS 提供各自的 CLR,把 IL 翻译为本机码,做法和Mono类似,这完全由官方设计并重新实现
跨平台如何实现
- 统一编译产物:所有 .NET 语言先编译为 IL(中间语言)+
元数据,封装在程序集。
- 各平台实现 CLR:不同操作系统安装对应
CLR(Framework/Core/Mono),使 IL 能在本机上运行。
- CLR 把 IL
翻译成本机机器码,并提供运行时服务(内存、线程、异常管理等)。

总结:跨语言靠 IL 统一,跨平台靠各平台的 CLR 实现。
本文作者:xuxuxuJS
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA
许可协议。转载请注明出处!