对 MSIL 感到困惑
Confused about MSIL
我看了c#程序编译分两步。
它首先生成 MSIL,然后生成机器代码。所以我很想看看第一阶段编译(MSIL)生成的文件。
我一直以为DLL文件是包含MSIL代码的文件,但我想我错了
你是对的。 .NET DLL 和 EXE(在 .NET 中称为程序集)是包含 MSIL 的。 DLL 可以有不同于 .NET 格式的其他格式,因此 .NET 程序集有一个 header 使它们可以被识别。您可以使用 corflags.exe
检查 DLL/EXE 是否为 .NET DLL/EXE.
程序集中的 IL 代码由 CLR(公共语言运行时)解释,将其转换为机器代码。您实际上看不到该步骤,因为它是由 JIT'ter 在运行时完成的(或者您应该 pre-compile 使用 ngen.exe
的程序集并读取生成的文件)。
.net 有多种语言(C#、VB.net 等)。
编译 C# 项目库时,它会输出一个包含 IL
代码的 dll。
C# 编译为 IL 如同 VB.net 编译为 IL,因此您可以 "mix up" 在两种语言之间编写代码。
此 IL 使用 JIT compiler in runtime (read about the CLR).
编译为机器代码
使用反射器反射一个dll就可以看到IL代码
阅读更多here。
我看了c#程序编译分两步。
它首先生成 MSIL,然后生成机器代码。所以我很想看看第一阶段编译(MSIL)生成的文件。
我一直以为DLL文件是包含MSIL代码的文件,但我想我错了
你是对的。 .NET DLL 和 EXE(在 .NET 中称为程序集)是包含 MSIL 的。 DLL 可以有不同于 .NET 格式的其他格式,因此 .NET 程序集有一个 header 使它们可以被识别。您可以使用 corflags.exe
检查 DLL/EXE 是否为 .NET DLL/EXE.
程序集中的 IL 代码由 CLR(公共语言运行时)解释,将其转换为机器代码。您实际上看不到该步骤,因为它是由 JIT'ter 在运行时完成的(或者您应该 pre-compile 使用 ngen.exe
的程序集并读取生成的文件)。
.net 有多种语言(C#、VB.net 等)。
编译 C# 项目库时,它会输出一个包含 IL
代码的 dll。
C# 编译为 IL 如同 VB.net 编译为 IL,因此您可以 "mix up" 在两种语言之间编写代码。
此 IL 使用 JIT compiler in runtime (read about the CLR).
编译为机器代码使用反射器反射一个dll就可以看到IL代码
阅读更多here。