Emisión abierta código generado ensamblaje aparece vacío en el reflector cuando no lo es.

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

Pregunta

estoy generando una dinámica conjunto usando Reflection.Emit que incluye una sola clase. Tengo un error que está causando un BadImageException. Para resolver esto necesito para ver el código compilado, y por lo tanto estoy ahorrando la dinámica de montaje en el disco.

He intentado ya PEVerify en la iglesia que parece pensar que no hay errores. Ahora quiero ver el código generado en el reflector, pero la asamblea como aparece vacía (que sé que no lo es).

¿Alguna idea de por qué ocurre esto?

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");

Por cierto que ya estoy usando el plugin Relection.Emit de reflector que no lo hace ayuda con este problema.

¿Fue útil?

Solución

Reemplazar:

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

Con:

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

A continuación, busque en el directorio actual, probablemente su carpeta bin. Ensamblajes y módulos son técnicamente dos entidades separadas, y que sólo están ahorrando la información de ensamblado, no la información del módulo (donde todas sus vidas código). (Además, no nombrar a los dos con el mismo nombre, por supuesto.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top