Ouvrez Emis le code assembleur généré apparaît vide dans le réflecteur quand il est pas.

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

Question

Je générer une dynamique assemblage à l'aide Reflection.Emit qui comprend une seule classe. J'ai un bug qui cause un BadImageException. Pour résoudre ce que je besoin de voir le code compilé, et donc je suis sauver la dynamique assemblage sur le disque.

Je l'ai déjà essayé PEVerify contre l'assemblée qui semble penser qu'il n'y a pas d'erreurs. Je veux maintenant voir le code généré dans le réflecteur, mais apparaît comme l'ensemble vide (que je sais que ce n'est pas).

Toute idée pourquoi cela se passe?

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

Par la façon dont je suis déjà en utilisant le plugin Relection.Emit pour réflecteur qui ne aide cette question.

Était-ce utile?

La solution

Remplacer:

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

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

Ensuite, regardez pour dans votre répertoire courant, probablement votre dossier bin. Assemblages et de modules sont techniquement deux entités distinctes, et vous enregistrez uniquement les informations d'assemblage, pas les informations de module (où toutes vos vies de code). (Aussi, ne nommez pas tous les deux avec le même nom, bien sûr.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top