Открытый излучаемый сборки сгенерированный код появляется пустым в отражателе, когда это не так.

StackOverflow https://stackoverflow.com/questions/3962955

Вопрос

Я генерирую динамическую сборку с использованием отражения .emit, который включает в себя один класс. У меня есть ошибка, которая вызывает бабинуэкселирование. Чтобы устранить это, мне нужно увидеть скомпилированный код, и поэтому я сохраняю динамическую сборку на диск.

Я уже попробовал PEEvify против сборки, которая, кажется, думает, что нет ошибок. Теперь я хочу просмотреть сгенерированный код в отражателе, но сборка появляется как пустое (что я знаю, что это не).

Есть идеи, почему это происходит?

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 Плагин для отражателя, который не помогает с этой проблемой.

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

Решение

Заменять:

var moduleBuilder = assemblyBuilder.DefineDynamicModule(assemblyName.Name);

С участием:

var moduleBuilder = assemblyBuilder.DefineDynamicModule(assemblyName.Name, "yourfilename.dll");

Затем ищите его в вашем текущем каталоге, наверное, ваша папка Bin. Сборки и модули являются технически двумя отдельными объектами, и вы сохраняете только информацию об сборке, а не информацию модуля (где все ваши кодовые жизни). (Кроме того, не называйте их как с тем же именем, конечно.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top