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でメソッドをロードする場合は、実際のアセンブリを作成する必要があると思います。これを行うには、の代わりにを使用MethodBuilderDynamicMethodします。それらの使用法のほとんどは同じである必要があります。

于 2011-06-14T22:25:23.010 に答える