Сохранение динамики на диск
-
27-10-2019 - |
Вопрос
У меня унаследованный код, который использует 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");
Не связан с StackOverflow