将DynamicMethod保存到磁盘

问题描述:

我已经继承了使用DynamicMethod在运行时生成方法的代码。我也需要修改一些正在生成的代码。将DynamicMethod保存到磁盘

由于我在MSIL一个的n00b,我希望能够在反射器上装入生成的代码,并确保代码做什么,我祈祷它;)

只是,我不能了解如何序列化“匿名托管的DynamicMethods程序集”到磁盘。这可能吗?如果是这样,怎么样?

我认为如果你想在Reflector或dotPeek中加载方法,你需要创建一个实际的程序集。为此,use MethodBuilder而不是DynamicMethod。他们大多数的用法应该是一样的。

+0

对不起,让这个开放了这么久。我想等到我能够在接受之前实现这一点,但我当然正在开展另一个项目!尽管如此,这似乎是唯一真正的答案,所以当我重新开始工作时,我会知道该怎么做。 – 2011-06-16 13:19:15

试试这个,

var assemblyName = new AssemblyName("SomeName"); 
    var assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave, @"c:"); 
    var moduleBuilder = assemblyBuilder.DefineDynamicModule(assemblyName.Name, assemblyName.Name + ".dll"); 

    TypeBuilder builder = moduleBuilder.DefineType("Test", TypeAttributes.Public); 
    var methodBuilder = builder.DefineMethod("DynamicCreate", MethodAttributes.Public, typeof(T), new[] { typeof(IDataRecord) }); 
    /* this line is a replacement for your new DynamicMethod(....) line of code 

    /* GENERATE YOUR IL CODE HERE */ 

    var t = builder.CreateType(); 
    assemblyBuilder.Save(assemblyName.Name + ".dll");