Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将方法转换为C#源代码_C#_Reflection_Code Generation_Reflector - Fatal编程技术网

将方法转换为C#源代码

将方法转换为C#源代码,c#,reflection,code-generation,reflector,C#,Reflection,Code Generation,Reflector,我正在编写一个相当简单的代码生成工具,需要能够将MSIL(或MethodInfo)对象转换为其C#源代码。我意识到Reflector在这方面做得很好,但它有一个令人讨厌的“特性”,即只作为UI 我知道我可以直接生成C#字符串,使用string.Format插入变量部分,但我更希望能够以编程方式生成方法(例如委托或MethodInfo对象),然后将这些方法传递给编写器,编写器将其转换为C# 系统库使得在运行时从C#源代码字符串转换为编译(和可执行)方法变得如此简单,但却不可能从对象转换为源代码,这

我正在编写一个相当简单的代码生成工具,需要能够将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。