Exe和托管DLL区别是什么?

前言
win平台下,一般的bin/debug目录下生成了exe和托管DLL文件,而AOT只需exe即可运行。有什么区别呢?本篇看下

概括

Roslyn编译源码生成的exe和托管DLL,实质上前者也即exe是个启动器,它是个非托管exe,里面包含了启动CLR入口(Main)的代码,引导CLR加载托管dll,然后调用托管dll里面的MSIL构建内存模型,以及编译成机器码等。.

AOT的exe,他实质上是个静态链接,把托管DLL里面的东西生成了obj目标文件之后,通过链接器链接成可执行文件执行。所以AOT的exe实质上既是启动器,启动CLR,也是运行器,运行CLR。

AOT的Exe和Roslyn编译源码生成的exe都是非托管,标准pe文件。但Roslyn生成的DLL则是非托管的,也是PE文件,但是是扩展。这点需要注意。

结尾

点击下方卡片,关注后,后台回复:dotnet7。免费领取一套CLR/JIT/MSIL视频技术教程。你也可以加入我们(可加微信tyz_jhpt,备注:加群。拉你进去),一起学习进步。