2009-12-09 7 views

Respuesta

0

Puede hacerlo utilizando SOS en WinDbg.

El problema es encontrar los módulos.

Si lo tiene en sus manos, hay un comando 'SaveModule' para volcar el módulo/ensamblado al archivo.

Buena suerte :)

+1

Bueno, hablando de intentarlo de nuevo, no puedes guardar un módulo «Ejecutar» solo :) –

+0

@JB: esto es dentro de WinDbg, no estoy al tanto de tales limitaciones. – leppie

+0

Eso es lo que estoy diciendo. Puede ver el módulo con! DumpDomain, pero no puede! SaveModule it. –

2

Prueba esto (que se encuentra here):

byte[] dllAsArray; 

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

    formatter.Serialize(stream, results.CompiledAssembly); 

    dllAsArray = stream.ToArray(); 
} 
+0

Esto es cierto. También puede enviarlos por Internet (a través de WCF, por ejemplo), devolverlo a un Ensamblaje en el otro extremo y cargarlo. Sopló mi mente. – gjvdkamp

+0

Sí, eso también funciona :) – Roboblob

+0

En su lugar, podría usar File.ReadAllBytes en el archivo que está almacenado en la carpeta temporal en el momento de la compilación. –

1

Ha sido un tiempo desde que hice esto, supongo que el programa que te da la DLL utiliza CompilerParameters.GenerateInMemory = Cierto. Sin embargo

La cosa es que la DLL en realidad quedan guardados en el disco de alguna carpeta temporal por un breve tiempo (mientras se ejecuta o algo ...) porque eso es cómo funciona el compilador de C# (trabajaron?).

Recuerdo que esto era un problema para mí en ese momento, pero ahora tengo problemas para recuperar los detalles, dame un segundo. Probablemente puede descubrir esto con ProcessExplorer o herramientas similares para ver qué archivos se guardaron/tocaron.

Cuestiones relacionadas