我继承了使用DynamicMethod在运行时生成方法的代码。我还需要修改一些正在生成的代码。
因为我是MSIL的n00b,所以我希望能够在Reflector中加载生成的代码,并确保代码执行我祈祷的功能;)
只是,我无法弄清楚如何将“Anonymousously Hosted DynamicMethods Assembly”序列化到磁盘。这可能吗?如果是这样,怎么样?
答案 0 :(得分:6)
试试这个,
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");
答案 1 :(得分:2)
我认为如果要在Reflector或dotPeek中加载方法,则需要创建实际的程序集。为此,use MethodBuilder
代替DynamicMethod
。它们的大多数用法应该是相同的。