6

我继承了使用 DynamicMethod 在运行时生成方法的代码。我还需要修改一些正在生成的代码。

由于我是 MSIL 的一名 n00b,我希望能够在 Reflector 中加载生成的代码,并确保代码执行我所祈祷的操作;)

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

4

2 回答 2

8

尝试这个,

  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");
于 2011-07-06T09:16:59.750 回答
3

我认为如果要在 Reflector 或 dotPeek 中加载方法,则需要创建一个实际的程序集。为此,请使用MethodBuilder而不是DynamicMethod. 它们的大部分用法应该是相同的。

于 2011-06-14T22:25:23.010 回答