2009-12-09 7 views

Antwort

0

Sie können dies mit SOS in WinDbg tun.

Das Problem besteht darin, die Module zu finden.

Wenn Sie Ihre Hände darauf bekommen, gibt es einen 'SaveModule' Befehl, um das Modul/Assembly in eine Datei zu dumpen.

Viel Glück :)

+1

Nun, über einen erneuten Versuch zu sprechen, können Sie nicht speichern ein Modul «Run» nur :) –

+0

@JB: Dies ist aus WinDbg, mir sind solche Einschränkungen nicht bekannt. – leppie

+0

Das ist was ich sage. Sie können das Modul mit! DumpDomain sehen, aber Sie können es nicht speichern! –

2

Versuchen Sie, diese (gefunden here):

byte[] dllAsArray; 

using (MemoryStream stream = new MemoryStream()) 
{ 
    BinaryFormatter formatter = new BinaryFormatter(); 

    formatter.Serialize(stream, results.CompiledAssembly); 

    dllAsArray = stream.ToArray(); 
} 
+0

Das ist wahr. Sie können sie auch über das Internet (z. B. über WCF) senden, am anderen Ende wieder in eine Assembly verschieben und laden. Hat meinen Horizont erweitert. – gjvdkamp

+0

Yup, das funktioniert auch :) – Roboblob

+0

Stattdessen könnten Sie File.ReadAllBytes für eine Datei verwenden, die zum Zeitpunkt der Kompilierung im temporären Ordner gespeichert ist. –

1

Es ist schon eine Weile her, seit ich das tat, ich nehme an, dass das Programm, das Sie die DLL verwendet CompilerParameters.GenerateInMemory gibt = Wahr.

Die Sache ist jedoch, dass die DLL tatsächlich auf der Festplatte in einem temporären Ordner für eine kurze Weile gespeichert wird (während es läuft oder so ...), weil so der C# -Compiler funktioniert (funktioniert?).

Ich kann mich erinnern, dass das ein Problem für mich damals ist, aber ich habe Schwierigkeiten, die Details jetzt zurückzubekommen, gib mir eine Sekunde. Sie können dies möglicherweise mit ProcessExplorer oder ähnlichen Tools herausfinden, um zu sehen, welche Dateien gespeichert/berührt wurden.

Verwandte Themen