Frage

Ich bin Erzeugung eines dynamischen Assembly Reflection.Emit verwendet, die eine einzige Klasse umfasst. Ich habe einen Fehler, der eine BadImageException verursacht. Um diesen Ich brauche zu lösen den kompilierten Code zu sehen, und deshalb bin ich Speicher die dynamische Assembly auf dem Datenträger.

Ich habe schon PEVerify gegen die Versammlung versucht, die keine Fehler zu denken scheint. Ich möchte nun den generierten Code in Reflector sehen, aber das erscheint Baugruppe als leer (was ich weiß, es ist nicht).

Jede Idee, warum dies geschieht?

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

Durch die Art, wie ich bin schon das Relection.Emit Plugin für Reflektor, die sich mit diesem Thema nicht hilft.

War es hilfreich?

Lösung

Ersetzen Sie:

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

Mit:

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

Dann ist es im aktuellen Verzeichnis, wahrscheinlich die Ordner sind. Baugruppen und Module sind technisch zwei getrennte Einheiten, und Sie sind nur die Montageinformation, nicht die Modulinformationen speichern (in dem alle Code Leben). (Auch nicht nennt sie beide mit dem gleichen Dateinamen, natürlich.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top