将方法转换为C#源代码
我正在编写一个相当简单的代码生成工具,需要能够将MSIL(或MethodInfo)对象转换为其C#源代码。我意识到Reflector在这方面做得很好,但它有一个令人讨厌的“特性”,即只作为UI 我知道我可以直接生成C#字符串,使用string.Format插入变量部分,但我更希望能够以编程方式生成方法(例如委托或MethodInfo对象),然后将这些方法传递给编写器,编写器将其转换为C# 系统库使得在运行时从C#源代码字符串转换为编译(和可执行)方法变得如此简单,但却不可能从对象转换为源代码,这似乎有点愚蠢——即使是对于简单的事情将方法转换为C#源代码,c#,reflection,code-generation,reflector,C#,Reflection,Code Generation,Reflector,我正在编写一个相当简单的代码生成工具,需要能够将MSIL(或MethodInfo)对象转换为其C#源代码。我意识到Reflector在这方面做得很好,但它有一个令人讨厌的“特性”,即只作为UI 我知道我可以直接生成C#字符串,使用string.Format插入变量部分,但我更希望能够以编程方式生成方法(例如委托或MethodInfo对象),然后将这些方法传递给编写器,编写器将其转换为C# 系统库使得在运行时从C#源代码字符串转换为编译(和可执行)方法变得如此简单,但却不可能从对象转换为源代码,这
有什么想法吗?作为应用程序的一部分,我编写的代码生成器使用了
String.Format
,尽管我对String.Format
(Lisp宏在一天中的任何时候都会打败它),但它做得很好。无论如何,C#编译器将重新检查所有生成的方法,因此通过Reflection.Emit和(尚未编写的)MSIL-to-C#反编译器的往返,您将一无所获
PS:如果你想使用重量级的东西,为什么不使用CodeDOM呢?这让你可以输出到一个文件,并且可以从命令行运行Reflector。让它做你想做的事情可能比使用你自己的反编译器要简单
是另一个具有命令行选项的反编译器,但自.NET 1.1以来它一直未更新。不过,它是开源的,所以您可以将解决方案建立在它的基础上 嗨。CodeDom在生成代码时很有用,但不支持从源代码解析到CodeDom对象。@DavidDao您可以使用Roslyn。