Je génère un assemblage dynamique à l'aide de Reflection.Emit qui inclut une seule classe. J'ai un bogue qui cause une erreur BadImageException. Pour résoudre ce problème, j'ai besoin de voir le code compilé, et donc je sauvegarde l'assemblage dynamique sur le disque.Le code généré par l'assembly Open Emitted apparaît vide dans Reflector alors qu'il ne l'est pas.
J'ai déjà essayé PEVerify contre l'ensemble qui semble penser qu'il n'y a pas d'erreurs. Je veux maintenant voir le code généré dans Reflector, mais l'assemblage apparaît vide (ce que je sais que ce n'est pas le cas).
Une idée de pourquoi cela se passe-t-il?
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à à l'aide du plug-in Relection.Emit
pour réflecteur qui ne contribue pas à cette question.
BadImageFormatException? C'est bizarre. Documenter l'exception mieux, message + pile trace. –
Est-il vide quand on le regarde avec aussi ildasm? –
Non c'est BadImageException causée par une erreur dans l'émission de code IL. Même si je retourne mon code pour qu'il ne lève pas l'exception, je suis toujours incapable d'afficher le code émis dans Reflector. – TheCodeKing