2

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

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

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

有任何想法吗?

4

2 回答 2

1

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

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

于 2009-04-02T19:53:14.880 回答
0

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

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

于 2009-04-02T19:52:59.063 回答