对MSIL感到困惑

时间:2015-02-02 08:02:31

标签: c# .net cil

我读了c#程序编译需要两个步骤。

首先它生成MSIL然后生成机器代码。所以我很想看到第一阶段编译(MSIL)生成的文件。

我一直认为DLL文件是包含MSIL代码的文件,但我认为我错了。

2 个答案:

答案 0 :(得分:5)

你是对的。 .NET DLL和EXE(在.NET中称为程序集)是包含MSIL的。 DLL可以使用另一种格式而不是.NET格式,这就是为什么.NET程序集有一个标题使它们可以识别的原因。您可以使用corflags.exe检查DLL / EXE是否是.NET DLL / EXE。

程序集中的IL代码由CLR(公共语言运行时)解释,后者将其转换为机器代码。您实际上无法看到该步骤,因为它是由JIT在运行时完成的(或者您应该使用ngen.exe预编译程序集并读取生成的文件)。

答案 1 :(得分:3)

.net有多种语言(C#,VB.net等)。

编译C#项目库时,它会输出一个包含IL代码的dll。

C#编译为IL,因为VB.net编译为IL,因此您可以在两种语言之间“混合”代码。

在运行时使用JIT编译器将此IL编译为机器代码(阅读CLR)。

您可以使用反射器并反映dll来查看IL代码。

了解更多here