2009-03-23 10 views
5

Mi escenario: estoy tratando de enviar un archivo de ensamblaje desde el servidor al cliente (a través de una conexión TCP directa). Pero el problema principal es: ¿cómo convierto este conjunto a bytes para que pueda transferirse fácilmente? utilicé siguiente -Ensamblaje a bytes

byte[] dllAsArray; 
using (MemoryStream stream = new MemoryStream()) 
{ 
    BinaryFormatter formatter = new BinaryFormatter(); 
    formatter.Serialize(stream,loCompiled.CompiledAssembly); 
    dllAsArray = stream.ToArray(); 
} 

Pero cuando uso -

Assembly assembly = Assembly.Load(dllAsArray); 

me sale una excepción -

No se pudo cargar el archivo o ensamblado '165 bytes cargados desde el servidor generador de código, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null 'o una de sus dependencias. Se intentó cargar un programa con un formato incorrecto. Por favor ayuda!

Respuesta

6

¿No sería simplemente el contenido crudo de dll, como si lo hubiera guardado en el disco? es decir, el equivalente de File.ReadAllBytes?

Parece que se genera el dll. ¿Se puede guardar en cualquier lugar? (área de temperatura, flujo de memoria, etc.)?

edición Puesto que parece que está utilizando código-dom, trate de usar PathToAssembly (el compilador-resultados) y File.ReadAllBytes (o un mecanismo de streaming similar).

4

Simplemente cargue el archivo a través de ReadAllBytes y escriba mediante WriteAllBytes. El byte [] se puede transferir a través de la red.

// Transfer to byte[] 
byte[] data = System.IO.File.ReadAllBytes(@"C:\ClassLibaryOne.dll"); 

// Write to file again 
File.WriteAllBytes(@"C:\ClassLibaryOne.dll", data); 

edición: Si utiliza un AssemblyBuilder para crear el archivo DLL, puede utilizar .Save (nombre del archivo) a persistir a usted disco duro antes.

AssemblyBuilder a = ... 
a.Save("C:\ClassLibaryTwo.dll);