Pregunta

He heredado un código que usa DynamicMethod para generar métodos en tiempo de ejecución. También necesito modificar parte del código que se está generando.

Como soy un N00B en MSIL, me encantaría poder cargar el código generado en reflector y asegurarme de que el código haga lo que rezo para que haga;)

Solo que no puedo entender cómo serializar el "ensamblaje DynamicMethods alojado anónimamente" al disco. es posible? ¿Si es así, cómo?

¿Fue útil?

Solución

Creo que si desea cargar el método en reflector o dotpeek, debe crear un ensamblaje real. Para hacer esto, usar MethodBuilder en vez de DynamicMethod. La mayor parte del uso de ellos debería ser el mismo.

Otros consejos

Prueba esto,

  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");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top