Открытый сгенерированный сборочный код кажется пустым в Reflector, если это не так.
Я генерирую динамическую сборку, используя Reflection.Emit, который включает в себя один класс. У меня есть ошибка, которая вызывает исключение BadImageException. Чтобы решить эту проблему, мне нужно увидеть скомпилированный код, и поэтому я сохраняю динамическую сборку на диск.
Я уже пробовал PEVerify против сборки, которая, кажется, думает, что нет никаких ошибок. Теперь я хочу просмотреть сгенерированный код в Reflector, но сборка выглядит пустой (что я знаю, что это не так).
Есть идеи, почему это происходит?
var assemblyName = new AssemblyName("An.Assembly");
var appDomain = Thread.GetDomain();
var assemblyBuilder = appDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave);
var moduleBuilder = assemblyBuilder.DefineDynamicModule(assemblyName.Name);
var typeBuilder = moduleBuilder.DefineType("MyClass", TypeAttributes.Public | TypeAttributes.Class);
...
typeBuilder.CreateType();
assemblyBuilder.Save("temp.dll");
Кстати, я уже использую Relection.Emit
плагин для отражателя, который не помогает с этой проблемой.
1 ответ
Заменить:
var moduleBuilder = assemblyBuilder.DefineDynamicModule(assemblyName.Name);
С:
var moduleBuilder = assemblyBuilder.DefineDynamicModule(assemblyName.Name, "yourfilename.dll");
Затем найдите его в текущем каталоге, возможно, в папке bin. Сборки и модули технически являются двумя отдельными объектами, и вы сохраняете только информацию о сборке, а не информацию о модуле (где живет весь ваш код). (Также, конечно, не называйте их обоих одинаковыми именами.)