问题描述
|
我继承了使用Dynamicmethod在运行时生成方法的代码。我还需要修改一些正在生成的代码。
由于我是MSIL的n00b会员,所以我很希望能够将生成的代码加载到Reflector中,并确保该代码能够完成我祈祷的工作;)
只是,我不知道如何将“匿名托管的Dynamicmethods程序集”序列化到磁盘。这可能吗?如果是这样,怎么办?
解决方法
我认为,如果要在Reflector或dotPeek中加载该方法,则需要创建一个实际的程序集。为此,请使用“ 0”代替“ 1”。它们的大多数用法应相同。
, 尝试这个,
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\");