.Net的运作机制,从dotnet --info命令行开始

前言

比如用一个命令新建一个控制台项目或者查看当前的版本信息:

dotnet new console ABC
dotnet --info

这个dotnet命令是如何操控CLR进行运行的呢?本篇来看下

概括

1.概念:
一:引导程序
上面dotnet命令实际上它就是一个C#程序,它所有的代码都是C#源码,它起一个引导的作用。后面带的参数比如new,console,--info这些其实是符号,它会在引导程序里面进行字符分割,然后赋为各种意思。比如dotnet new它是新建几个文件及文件夹,比如bin/Debug文件夹,比如Program.cs文件等。dotnet run/build则是执行运行或编译流程等。

二:宿主程序
dotnet命令作为一个引导程序,它主要是引导后面的.Net宿主corehost,host宿主是一套类C的C++程序,它会接受dotnet命令传递过来的参数,进行一定的修饰。到了这个地方,其实已经接近.Net程序的核心部位了。这里你可以自宿主一个程序,通过CLR API宿主一个Mini CLR

三:CLR加载
经过dotnet命令的引导宿主程序,在宿主程序里面对CLR进行初始化。初始化的目的主要是消化dotnet命令传递过来带参数,进行一定的标准化,调用CLR。CLR虚拟机这个是.Net核心程序,不多赘述,之前的很多文章都是围绕CLR展开的。它主要是构建内存模型,加载MSIL,调用JIT,以及GC垃圾回收。

2.运行示意图
一个.Net程序的运行,遵循一套微软定义的标准流程。所有的程序都会遵循这个流程进行运行,按照上面的说法,下面看下它的运行示意图:
411e9d18f5011159e952f6096525a96d.png

3.AOT程序是如何运作的呢?

AOT的dotnet命令调用的是ILC编译器,ILC编译器里面调用CLR进行机器码编译,然后存档可执行文件。所以这里有一点点不一样的地方。

而AOT运行也是不同,根据上面存档的可执行文件,AOT程序通过bootstrap的C++引导程序,引导执行上面存档的可执行文件。

结尾

作者:江湖评谈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值