日期:2014-05-20  浏览次数:20843 次

初学者请教一个C#编译执行的问题
最近在看一本书上说:C#.NET编译分成两步,第一部是预编译,将C#源代码编译成中间语言代码MSIL,在执行时使用JIT编译器将中间代码编译成本机代码,然后在CLR环境下运行本机代码

有几个问题想请教一下:
1、比如我在VS2005中编写了一个Hello的C#代码,在编译的时候(F5),是不是第一步和第二步编译都执行了?如果我想看看MSIL代码,怎么能看到呢?


2、在编译的过程中,使用到的C#基本类库中的类,是怎么编译的?是静态链接还是动态链接?

3、编译成本机代码以后,为什么还需要CLR环境?此时跟普通的一步编译产生的可执行代码有什么区别?我以为编译成本机代码就跟C代码编译成EXE一样了




------解决方案--------------------
1、是第一步和第二步编译都执行了,因为按F5的时候IDE做了2件事,编译和运行。在SDK的安装目录中有一个工具叫ildasm,可以打开任何.net编译出来的文件,打开即查看IL代码。

2、动态链接

3、要在win系统上只能直接运行win32程序,这样就失去了java、.net的跨平台特性了。所以java、.net都是先编译成中间代码,然后由虚拟机来运行。(cpu是不能识别中间代码的)