Domanda

Sto generando una dinamica assembly utilizzando Reflection.Emit che comprende una sola classe. Ho un bug che sta causando un BadImageException. Per risolvere questo ho bisogno di vedere il codice compilato, e quindi mi sto risparmiando la dinamica di montaggio su disco.

Ho già provato PEVerify contro il gruppo, che sembra pensare non ci sono errori. Ora voglio vedere il codice generato in Reflector, ma l'assemblaggio appare come vuoto (che io so che non è).

Qualche idea perché questo sta accadendo?

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

Tra l'altro sto già usando il plugin Relection.Emit per riflettore che non aiuto con questo problema.

È stato utile?

Soluzione

Sostituire:

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

Con:

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

quindi cercare nella directory corrente, probabilmente la cartella bin. Assemblati e moduli sono tecnicamente due entità separate, e si sta salvando solo le informazioni di montaggio, non le informazioni modulo (dove tutte le vostre vite di codice). (Inoltre, non li sia il nome con lo stesso nome, naturalmente.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top