【问题标题】:Convert a Method to C# source Code将方法转换为 C# 源代码
【发布时间】:2010-10-17 05:03:23
【问题描述】:

我正在编写一个相当简单的代码生成工具,并且我需要能够将 MSIL(或 MethodInfo)对象转换为其 C# 源代码。我意识到 Reflector 在这方面做得很好,但它有一个令人讨厌的“特性”,即仅作为 UI。

我知道我可以直接生成 C# 字符串,使用 string.Format 插入变量部分,但我真的更喜欢能够以编程方式生成方法(例如委托或 MethodInfo 对象),然后传递这些方法将它们转换为 C# 的作家。

系统库使得在运行时从 C# 源代码字符串到编译(和可执行)方法变得如此容易,但从对象到源代码却不可能——即使是简单的东西。

有什么想法吗?

【问题讨论】:

    标签: c# reflection code-generation reflector


    【解决方案1】:

    我作为应用程序的一部分编写的代码生成器使用String.Format,虽然我对String.Format 并不完全满意(Lisp 宏在一天中的任何时候都胜过它),但它可以很好地完成工作。无论如何,C# 编译器都会重新检查所有生成的方法,因此通过 Reflection.Emit 和(仍未编写的)MSIL-to-C# 反编译器来回往返,您将一无所获。

    PS:如果你想使用重量级的东西,为什么不使用 CodeDOM?

    【讨论】:

    • 嗨。 CodeDom 在生成代码时很有用,但不支持从源代码解析到 CodeDom 对象。
    • @DavidDao 你可以使用 Roslyn。
    【解决方案2】:

    这个add-in for Reflector 可以让你输出到一个文件,并且可以从命令行运行 Reflector。让它做你想做的事情可能比滚动你自己的反编译器更简单。

    Anakrino 是另一个带有命令行选项的反编译器,但它自 .NET 1.1 以来一直没有更新。但是,它是开源的,因此您可以基于它来解决您的解决方案。

    【讨论】:

      猜你喜欢
      • 2010-09-17
      • 1970-01-01
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-25
      • 1970-01-01
      相关资源
      最近更新 更多