为什么是程序集.exe文件?

Ser*_*gey 25 .net clr

正如我所理解的那样,.net Framework中的汇编是中间语言文件+一些元数据,清单和其他东西.

CLR将程序集转换为机器代码,可以在给定的本地机器上执行.

这意味着在CLR处理之前,程序集不应该由程序集执行.如果是这样,那为什么它有.exe扩展名,可以在Windows机器上执行?

Ali*_*tad 24

由于Windows需要创建一个进程,并且.exe​​将要做的第一件事是通过加载mscoree托管CLR.

CLR到C#:

Windows检查EXE文件的标头以确定是创建32位进程,64位进程还是WoW64进程后,Windows会将x86,x64或IA64版本的MSCorEE.dll加载到进程的地址空间中.在x86版本的Windows上,可以在C:\ Windows\System32目录中找到x86版本的MSCorEE.dll.在x64或IA64版本的Windows上,可以在C:\ Windows\SysWow64目录中找到x86版本的MSCorEE.dll,而在C:\ Windows \中可以找到64位版本(x64或IA64) System32目录(出于向后兼容性原因).然后,进程的主线程调用MSCorEE.dll中定义的方法.此方法初始化CLR,加载EXE程序集,然后调用其入口点方法(Main).此时,托管应用程序已启动并正在运行.


the*_*oop 7

我最近在.NET程序集中的CLR存根上写了一篇博客文章,以及它如何适合PE文件的可执行格式.整个系列都可以在这里找到.

本质上,在.NET程序集内部是一小部分启动CLR的本机代码.但是,此代码仅用于向后兼容.在Windows XP中,OS加载程序本身知道加载CLR以获取其中包含CLI标头的可执行文件.