将通过Reflection.Emit生成的类型保存为代码文件(.cs),而不是将其保存在.dll文件中

时间:2010-04-03 15:43:53

标签: c# .net reflection reflection.emit system.reflection

在开始之前,请告诉我的经验:我对C#.NET,Web服务,XML部分以及其他一些经验很有帮助。反思对我来说是新鲜事,虽然我已经阅读了很多内容并尝试了一些实验代码,但是使用反射并没有做出任何好的事情

我检查了many examples我们如何在运行时创建Type,然后可以将其保存在程序集(.dll)文件中。在我看到的所有示例中,都是关于将创建的类型保存在.dll文件而不是代码文件中。有没有办法从反射中创建代码文件?

我需要创建代码文件,因为我想分发代码而不是编译的程序集。我想做的就像xsd.exe那样,要么吐出.dll,要么吐出代码文件(用任何语言)。

没有任何方法可以创建代码文件,因为我能找到的大多数地方都是

AssemblyBuilder ab = System.AppDomain.CurrentDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.Save);

然后最后

ab.Save("QuoteOfTheDay.dll");

2 个答案:

答案 0 :(得分:4)

.NET框架中没有内置的反汇编程序。您可以使用Reflector将您发出的IL转换为它支持的源代码语言之一。这种方法很可能没有问题,Reflector旨在将编译器生成的代码转换回源代码。编译器对它们生成的IL倾向于保守,不像System.Reflection.Emit提供的任何方法。

如果你想要源代码,那么你最好先生成它。使用System.CodeDom。这就是System.Xml.Serialization使用的。

答案 1 :(得分:2)

通常使用字符串类或CodeDOM(http://msdn.microsoft.com/en-us/library/y2k85ax6.aspx)来生成C#源代码。

相关问题