代码之家  ›  专栏  ›  技术社区  ›  Manish Sinha

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

  •  1
  • Manish Sinha  · 技术社区  · 16 年前

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

    我需要创建代码文件,因为我要分发代码而不是编译的程序集。我想做的是 xsd.exe 是的,或者抛出一个.dll或者代码文件(用任何语言)。

    因为我能找到的大部分地方都是

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

    最后呢

    ab.Save("QuoteOfTheDay.dll");
    
    2 回复  |  直到 16 年前
        1
  •  4
  •   Hans Passant    16 年前

    .NET framework中没有内置反汇编程序。您可以使用Reflector将发出的IL转换为它支持的源代码语言之一。这不太可能不出问题地工作,Reflector的设计目的是将编译器生成的代码转换回源代码。编译器倾向于保守他们生成的IL,不像System.Reflection.Emit提供的“随遇而安”方法。

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

        2
  •  2
  •   jnoss    16 年前

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