Вопрос

У меня унаследованный код, который использует DynamicMethod для создания методов во время выполнения. Мне также необходимо изменить некоторые из генерируемых кодов.

Поскольку я n00b в MSIL, я хотел бы иметь возможность загрузить сгенерированный код в отражатель и убедиться, что код делает то, что я молюсь, чтобы он сделал;)

Только я не могу понять, как сериализовать «анонимно размещенную сборку динамикметодов» на диск. Это возможно? Если да, то как?

Это было полезно?

Решение

Я думаю, что если вы хотите загрузить метод в отражатель или 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