前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.Net的运作机制,从dotnet --info命令行开始

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

作者头像
宿春磊Charles
发布2023-09-08 13:11:50
3320
发布2023-09-08 13:11:50
举报
文章被收录于专栏:DotNet 致知

前言

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

代码语言:javascript
复制
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程序的运行,遵循一套微软定义的标准流程。所有的程序都会遵循这个流程进行运行,按照上面的说法,下面看下它的运行示意图:

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

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

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

结尾

作者:江湖评谈

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet 致知 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 概括
  • 结尾
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档