【问题标题】:Convert C# code to IL code将 C# 代码转换为 IL 代码
【发布时间】:2011-07-04 18:19:29
【问题描述】:

如何获得 C# 代码的 IL 代码?我可以使用外部库执行此操作,还是存在内部函数?

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

【问题讨论】:

  • @dlev:不完全是。我认为 OP 希望它以人类可读的形式出现。
  • @Robert:也许吧,虽然这个问题很模糊,我觉得(有点)尖刻的评论是有道理的。老实说,在没有更多上下文的情况下,我不能 100% 确定要问什么(即他们是否想从编译的代码中以人类可读的形式看到 IL,他们是否想将一些代码传递给一个返回数组的函数IL指令...)
  • 我想在对话框中显示 IL 代码,所以我不能使用 ildasm。

标签: c# .net il


【解决方案1】:

以编程方式?可以使用反射获取MethodInfo,然后调用MethodBase.GetMethodBody获取body。通过MethodBody,您可以致电GetILAsByteArray 等等。

当然,如果您只是想自己检查一下,这里有 ReflectordotPeek、ildasm(.NET SDK 的一部分),毫无疑问还有其他工具......

【讨论】:

  • 你会用它做什么?构建自己的编译器?
  • 我想要一个 c# 方法,所以你的第一句话似乎是很好的答案。谢谢乔恩!
  • @malinois:顺便说一下,我假设你是在已经编译 C# 代码作为 IL 之后? CSharpCodeProvider 将允许您将 C# 源代码 代码编译成 IL。
  • @Jon,我明白了。我仍然认为“Jon Skeet”是一个开发人员团队,即使你在这个DevelopersLife 上。你是团队的代言人。 ;)
  • @Jethro:如果有人为一群开发人员挑选一张脸,我希望他们能想出一个比我更好的脸:)
【解决方案2】:

像这样使用 IL 反汇编程序:

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

您将同时拥有 IL 和 exe。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        或,

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

        【讨论】:

          【解决方案6】:

          这是一个相当古老的问题,但我想补充一些准确性。

          GetMethodBody() 最多会给你一个字节数组,你需要手动解析它(这可能会很痛苦,因为一些操作码有两个字节)以获得人类可读的文本。

          我只想提及ILSpy 作为替代解决方案。

          它是开源的,这意味着您可以对其进行调试并将其集成到您的解决方案中。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-04-25
            • 1970-01-01
            • 2014-09-16
            • 1970-01-01
            • 1970-01-01
            • 2016-12-17
            • 2014-09-01
            相关资源
            最近更新 更多