日期:2014-05-18  浏览次数:20715 次

中间语言和最终执行的代码
没系统的学过C#和.Net的相关内容,最近用到,看了一下书,遇到一个问题。.Net框架下,先被编译成中间语言,然后根据所运行的机器,通过即时编译器编译成机器执行的本地代码。我看书上说的中间语言的扩展名是cil,但我看我用C#写的直接就编译成了exe,那么还通过即时编译器吗?还发现一个问题,程序运行报错时会提示具体哪个函数中的错误,如果是二进制的话,感觉不会提示哪个函数。先谢了!!

------解决方案--------------------
编译的exe文件和普通的非托管语言生成的exe文件是不同的
非托管语言生成的是征对特别平台的本地代码,这就是为什么相同的程序有32位版本和64版本。

托管语言生成的exe文件是msil代码(是指编译时生成的)。
当运行时,只将当前运行的那部分代码生成本地机器码。这就是即时编译。 

所以,托管的exe也会即时编译
------解决方案--------------------
一样是PE格式的,只不过需要运行时的支持,也正因为有运行时的支持,出现异常的时候才能够提供丰富的异常信息