• 【dotnet】dotnet和mono及跨平台实现原理及案例(重要)


    跨平台语言运行原理

    在任何一个平台(操作系统+硬件体系)上,编写和运行程序的三个最根本的需求是库、编译器/解释器(如将c#编译为IL即DLL或者java编译为class字节码)、运行环境(如CLR或者JVM)。库以类和方法(函数)的形式提供常用的例程,简化大型程序的编写。.NET框架也不例外,包含了许多类库。另外,把程序转换成可执行形式以及运行执行文件时,编译器和运行环境是必不可少的。

    简而言之跨平台就需要你语言在编译后的中间结果后,在任意目标平台上实现可以运行这个中间结果的程序即可。

    .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

    Mono 是一个第三方的 .NET Framework 开源实现,它是跨平台的,但是它的实现进度远远落后于官方实现。

    类库:包含了.NET类库的一部分,落后给官方实现
    编译器:高级语言转为IL 的⼯作实际上可以直接⽤微软已有的成果,这个是通用的,肯定落后官方
    运行时:Mono是将 CLR 在其他平台实现,就是跨平台,这个⼯作量不仅⼤,⽽且需要保证兼容,⾮常浩⼤的⼀个⼯程,Mono 做到了,致敬!

    dotnet5.0+跨平台实现demo

    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退出。");
                    }
                }
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    linux上安装.net5以上版本后运行这个程序

    root@debiantest1:/data/demo1# dotnet ConsoleApp1.dll
    Hello World!输入Q退出。
    
    • 1
    • 2

    参考 https://www.cnblogs.com/zhupengfei/p/16086032.html

    后续同样使用mono linux平台的CLR也可以运行dll、exe程序

    备注一些补充概念

    1.IL/CIL

    编译器编译 : 使用C#书写的脚本会经过Mono或者.net平台的C#编译器打包的中间语言,实际就是exe或者dll文件(重要)

    2.CLR

    用于运行IL的

  • 相关阅读:
    选择排序--python(详解)
    【Python】Pyside6简易版教程
    【C语言】每日一题,快速提升(2)!
    2.Android应用资源
    【计算机视觉 | 图像分割】arxiv 计算机视觉关于图像分割的学术速递(8 月 29 日论文合集)
    QT MV\MVC结构
    HTML5和CSS3四属性总结一
    拒绝内卷,阿里架构师整理的这份Java核心手册,堪称最强
    Linux 中如何安全地抹去磁盘数据?
    《从程序员到架构师》:从现在开始培养架构思维,一点都不晚
  • 原文地址:https://blog.csdn.net/qq_22849251/article/details/126678094