从 ILGenerator 检索代码
我已经编写了一些函数来使用 ILGenerator 创建 exe 文件。我想要向用户展示不使用 ILDasm 或 Reflector 等外部工具生成的 IL 语言。
在程序执行期间,我已将每个 OpCode 添加到 ILGenerator,因此我可以使用具有 OpCode 表示形式的字符串将每个 OpCode 保存在列表中,但我希望直接获取 IL 代码。能做到吗?
重要:我使用的是 Mono 2.6。
I have write some function to create an exe file using ILGenerator. What I want is to show to user the IL language generated whithout using external tools like ILDasm or Reflector.
during the execution of my program I have added each OpCode to ILGenerator, so I can save each of this OpCode in a list using a string with the OpCode representation but I wish prefer to get the IL code directly. Can it be done?
Important: I'm using Mono 2.6.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您有
MethodBuilder
,则应该能够使用builder.GetMethodBody().GetILAsByteArray()
获取byte[]
形式的 IL >。但要理解这一点,您需要以某种方式解析它。因此,更好的选择可能是使用 Mono Cecil,它可以为您提供程序集的 IL 代码以可读的格式。
If you have a
MethodBuilder
, you should be able to usebuilder.GetMethodBody().GetILAsByteArray()
to get the IL as abyte[]
. But to make any sense out of that, you would need to parse it somehow.So, a better choice is probably using Mono Cecil, which can give you the IL code of an assembly in a readable format.
正如 Hans Passant 和 svick 所说,答案是 Mono.Cecil。让我们看看:
当然可以更有效地完成,但它解决了我的问题。
As Hans Passant and svick had said, the answer is Mono.Cecil. Let's see:
Sure it can be done more efficient but it solves my problem.