DynamicMethodを使用して実行時にメソッドを生成するコードを継承しました。また、生成されているコードの一部を変更する必要があります。
私はMSILのn00bなので、生成されたコードをReflectorにロードして、コードが私が祈っていることを確実に実行できるようにしたいと思います;)
ただ、「匿名でホストされているDynamicMethodsアセンブリ」をディスクにシリアル化する方法がわかりません。これは可能ですか?もしそうなら、どのように?
DynamicMethodを使用して実行時にメソッドを生成するコードを継承しました。また、生成されているコードの一部を変更する必要があります。
私はMSILのn00bなので、生成されたコードをReflectorにロードして、コードが私が祈っていることを確実に実行できるようにしたいと思います;)
ただ、「匿名でホストされているDynamicMethodsアセンブリ」をディスクにシリアル化する方法がわかりません。これは可能ですか?もしそうなら、どのように?
これを試して、
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");
ReflectorまたはdotPeekでメソッドをロードする場合は、実際のアセンブリを作成する必要があると思います。これを行うには、の代わりにを使用MethodBuilder
DynamicMethod
します。それらの使用法のほとんどは同じである必要があります。