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

时间:2011-03-29 16:14:15

标签: .net clr

根据我的理解,.net Framework中的汇编是中间语言文件+一些元数据,清单,也许还有别的东西。

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

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

4 个答案:

答案 0 :(得分:24)

由于Windows需要创建一个流程,而.exe将通过加载 mscoree 托管CLR

来自CLR via C#

  

Windows检查EXE后   文件的标题,以确定是否   创建一个32位进程,一个64位   进程,或WoW64进程,Windows   加载x86,x64或IA64版本   MSCorEE.dll进入进程的地址   空间。在x86版本的Windows上,   MSCOREE.dll的x86版本可以   在C:\ Windows \ System32中找到   目录。在x64或IA64版本上   Windows的x86版本   MSCorEE.dll可以在。中找到   C:\ Windows \ SysWow64目录,   而64位版本(x64或   IA64)可以在   C:\ Windows \ System32目录(for   向后兼容性原因)。然后,   进程'主线程调用a   MSCorEE.dll中定义的方法。   此方法初始化CLR,加载   EXE程序集,然后调用它   入口点法(主要)。在这   点,托管应用程序已启动   并且正在运行。

答案 1 :(得分:7)

我最近在.NET程序集中的CLR存根上编写了一个blog post,以及它如何适合PE文件的可执行格式。可以找到整个系列here

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

答案 2 :(得分:2)

.NET .exe是一种特殊的.exe,它将首先加载CLR(公共语言运行时)。然后它将通过CLR在.exe中编译IL代码。

通过.NET框架编译的.exe是一种Portable Executable。 .exe具有CLR标头和CLR数据部分。当.exe加载时,操作系统将控制CLR。 .exe中的CLR数据部分具有元数据和IL(中间语言)段。元数据段包含有关程序集的信息(例如程序集清单)。 IL段包含IL格式的程序代码。这是一种类似于Java字节码的中间格式。

答案 3 :(得分:0)

因为它仍然是EXEcutable。