C# 对MSIL感到困惑
我读过c#程序编译需要两个步骤 它首先生成MSIL,然后生成机器代码。所以我很想看到由第一阶段编译(MSIL)生成的文件C# 对MSIL感到困惑,c#,.net,cil,C#,.net,Cil,我读过c#程序编译需要两个步骤 它首先生成MSIL,然后生成机器代码。所以我很想看到由第一阶段编译(MSIL)生成的文件 我一直认为DLL文件是包含MSIL代码的文件,但我认为我错了。你是对的。NET DLL和EXE(在.NET中称为程序集)是包含MSIL的。DLL可以有不同于.NET的另一种格式,因此.NET程序集有一个头,使它们可以识别。您可以使用corflags.exe检查DLL/exe是否为.NET DLL/exe 程序集中的IL代码由CLR(公共语言运行库)解释,CLR将其转换为机器代
我一直认为DLL文件是包含MSIL代码的文件,但我认为我错了。你是对的。NET DLL和EXE(在.NET中称为程序集)是包含MSIL的。DLL可以有不同于.NET的另一种格式,因此.NET程序集有一个头,使它们可以识别。您可以使用
corflags.exe
检查DLL/exe是否为.NET DLL/exe
程序集中的IL代码由CLR(公共语言运行库)解释,CLR将其转换为机器代码。您实际上看不到该步骤,因为它是由JIT在运行时完成的(或者您应该使用
ngen.exe预编译程序集并读取生成的文件)。您是对的。NET DLL和EXE(在.NET中称为程序集)是包含MSIL的。DLL可以有不同于.NET的另一种格式,因此.NET程序集有一个头,使它们可以识别。您可以使用corflags.exe
检查DLL/exe是否为.NET DLL/exe
程序集中的IL代码由CLR(公共语言运行库)解释,CLR将其转换为机器代码。您实际上看不到该步骤,因为它是由JIT在运行时完成的(或者您应该使用ngen.exe
预编译程序集并读取生成的文件)。.net有多种语言(C#、VB.net等)
编译C#项目库时,它会输出一个包含IL
代码的dll
C#编译成IL就像VB.net编译成IL一样,因此您可以将两种语言之间的代码“混用”
此IL在运行时使用编译器编译为机器代码(请阅读有关
您可以通过使用反射器和反射dll来查看IL代码
阅读更多。.net有多种语言(C#、VB.net等)
编译C#项目库时,它会输出一个包含IL
代码的dll
C#编译成IL就像VB.net编译成IL一样,因此您可以将两种语言之间的代码“混用”
此IL在运行时使用编译器编译为机器代码(请阅读有关
您可以通过使用反射器和反射dll来查看IL代码
阅读更多。您可以使用corflags.exe
。如果文件没有有效的托管头,它将返回一个错误。您具体要求什么?这里提出了几个问题……我阅读了c#程序编译需要两个步骤。首先,它生成MSIL,然后生成机器代码。所以我很想看看编译第一阶段生成的文件。我一直认为dll文件是包含MSIL代码的文件,但我认为我错了。请告诉我。使用ILDASM.exe打开DLL/exe文件。它是框架的一部分。这可能会有帮助:您可以使用corflags.exe
。如果文件没有有效的托管头,它将返回一个错误。您具体要求什么?这里提出了几个问题……我阅读了c#程序编译需要两个步骤。首先,它生成MSIL,然后生成机器代码。所以我很想看看编译第一阶段生成的文件。我一直认为dll文件是包含MSIL代码的文件,但我认为我错了。请告诉我。使用ILDASM.exe打开DLL/exe文件。它是框架的一部分。这可能会有帮助:LinqPad实际上为您编译的代码生成IL,理论上,使用未模糊化的代码,完全可以在“MSIL”中获得大部分内容。是的,但第二步不是。反射和ILDASM是第一步使用的工具。你说“第二步不是”是什么意思?除非你对代码进行了模糊处理,否则你可以反映它并重新编译它。啊,现在我明白了,对我来说仍然是早上。LinqPad实际上为你编译的代码生成IL,理论上,使用未模糊的代码,完全有可能在“MSIL”中获得大部分内容。是的,但第二步不是。反射和ILDASM是第一步使用的工具。你说“第二步不是”是什么意思?除非你把代码弄糊涂了,否则你可以把它反映出来,然后重新编译。啊,现在我明白了,对我来说还是早上好。