赞
踩
在任何一个平台(操作系统+硬件体系)上,编写和运行程序的三个最根本的需求是库、编译器/解释器(如将c#编译为IL即DLL或者java编译为class字节码)、运行环境(如CLR或者JVM)
。库以类和方法(函数)的形式提供常用的例程,简化大型程序的编写。.NET框架也不例外,包含了许多类库。另外,把程序转换成可执行形式以及运行执行文件时,编译器和运行环境是必不可少的。
简而言之跨平台就需要你语言在编译后的中间结果后,在任意目标平台上实现可以运行这个中间结果的程序即可。
2002年微软发布的.net framework
(至今更新到4.8),只针对window平台
,其主要包含管理代码执行的 CLR (公共语言运行时)
和为构建应用程序提供丰富类库的 BCL (基础类库)
2016年微软发布.net core
,完全开源,实现了跨平台,.net core
因此需要针对不同平台打包CLR(通用语言运行时)
, 其包含 CLR
的跨平台实现 CoreCLR
和一个相比 BCL
更简化
的类库 CoreFX
,最新是.net core 3.1
之后被更名为.net5
2020年微软发布.net5.0
,整合了.net core,实现大一统
Mono 是一个第三方的 .NET Framework 开源实现,它是跨平台的,但是它的实现进度远远落后于官方实现。
类库:包含了.NET类库的一部分,落后给官方实现
编译器:高级语言转为IL 的⼯作实际上可以直接⽤微软已有的成果,这个是通用的,肯定落后官方
运行时:Mono是将 CLR 在其他平台实现,就是跨平台,这个⼯作量不仅⼤,⽽且需要保证兼容,⾮常浩⼤的⼀个⼯程,Mono 做到了,致敬!
c#demo
using System; using System.IO; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; namespace ConsoleApp1 { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!输入Q退出。"); while (true) { string str = Console.ReadLine(); if (str.ToLower() == "q") { break; } else { Console.WriteLine("输入Q退出。"); } } } } }
linux上安装.net5以上版本后运行这个程序
root@debiantest1:/data/demo1# dotnet ConsoleApp1.dll
Hello World!输入Q退出。
参考 https://www.cnblogs.com/zhupengfei/p/16086032.html
后续同样使用mono linux平台的CLR也可以运行dll、exe程序
编译器编译
: 使用C#书写的脚本会经过Mono或者.net平台的C#编译器
打包的中间语言,实际就是exe或者dll文件(重要)
用于运行IL的
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。