DynamicMethodをディスクに保存します
-
27-10-2019 - |
質問
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");
所属していません StackOverflow