質問

DynamicMethodを使用して実行時にメソッドを生成するコードを継承しました。また、生成されているコードの一部を変更する必要があります。

私はMSILのN00Bなので、生成されたコードをリフレクターにロードし、コードが私がそれを祈ることをすることを確認できるようになりたいです;)

のみ、「匿名でホストされたDynamicMethodsアセンブリ」をディスクにシリアル化する方法を理解できません。これは可能ですか?もしそうなら、どうですか?

役に立ちましたか?

解決

メソッドをReflectorまたはDotPeekにロードしたい場合は、実際のアセンブリを作成する必要があると思います。これをする、 使用する MethodBuilder それ以外の DynamicMethod. 。それらの使用のほとんどは同じでなければなりません。

他のヒント

これを試して、

  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");
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top