将C#代码转换为IL代码

17

我如何获取C#代码的IL代码?我可以使用外部库来完成吗,还是存在内部函数可以实现?

编辑:我想要在我的应用程序中使用MessageBox显示IL代码。


1
@dlev:不完全正确。我认为OP希望以人类可读的形式呈现。 - Robert Harvey
1
@Robert:也许吧,但这个问题太模糊了,以至于我觉得有必要发表一些(有点)尖刻的评论。说实话,如果没有更多的上下文,我不确定正在被问什么(即他们是否想从编译代码中以人类可读的形式查看IL,还是想将一些代码传递给一个函数,该函数返回一个IL指令数组...)。 - dlev
我想在对话框中显示IL代码,所以我不能使用ildasm。 - Michaël
6个回答

32

需要以编程方式获取方法体?可以使用反射获取MethodInfo,然后调用MethodBase.GetMethodBody来获取方法体。从MethodBody中,除其他内容外,还可以调用GetILAsByteArray

当然,如果只是想自己检查它,也可以使用ReflectordotPeek、ildasm(.NET SDK的一部分)和其他工具...


你会怎么做呢?自己编写一个编译器吗? - Robert Harvey
我想要一个C#方法,所以你的第一句话似乎是个好答案。谢谢Jon! - Michaël
@malinois:顺便问一下,我猜你是想要已经编译好的C#代码作为IL吧?CSharpCodeProvider可以让你将C#源代码编译成IL。 - Jon Skeet
@Jon,我明白了。尽管你在这个DevelopersLife上,但我仍然认为“Jon Skeet”是一个开发团队。你是这个团队的代表。 ;) - Jethro
@Jon,你有这个问题的答案吗?https://dev59.com/_1jUa4cB1Zd3GeqPVeLI - Michaël
显示剩余3条评论

6

像这样使用IL反汇编器:

c:\il>csc Class.cs    
c:\il>ildasm /output=Class.il Class.exe

您将同时拥有IL和exe文件。


6

只需打开Visual Studio命令提示符并键入ildasm - 使用ildasm您可以打开任何程序集并显示生成的IL代码。


1

看看 LinqPad,它有查看 IL 的选项。


1
或者
Start -> Programs -> Microsoft .NET Framework SDK (Version) -> Tools -> MSIL Disassembler

1
这是一个相当老的问题,但我想添加一些准确性。 GetMethodBody() 最多只能提供一个字节数组,您需要手动解析它(由于一些操作码有两个字节,这可能很痛苦),以获得人类可读的文本。
我想提到 ILSpy 作为另一种解决方案。
它是开源的,意味着您可以在解决方案中调试和集成它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接