将方法转换为C#源代码

时间:2009-04-02 19:34:24

标签: c# reflection code-generation reflector

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

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

系统库使得在运行时从C#源代码字符串转换为编译(和可执行)方法变得如此容易,但从对象到源代码无法实现,这似乎有点愚蠢 - 即使是简单的的东西。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

这个add-in for Reflector允许您输出到文件,并且可以从命令行运行Reflector。除了滚动你自己的反编译器之外,做到你想做的事情可能更简单。

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

答案 1 :(得分:0)

我作为应用程序的一部分编写的代码生成器使用String.Format,虽然我对String.Format(Lisp宏在一天中的任何时间击败它)并不完全满意,但它完成了所有工作对。无论如何,C#编译器将重新检查所有生成的方法,因此通过Reflection.Emit和(仍未写入的)MSIL到C#反编译器的往返来获得任何东西。

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