assemblies incrustados en ejecutable

02/02/2005 - 13:35 por Mario Cobretti | Informe spam
Hola,

Es posible enlazar Dlls (assemblies) de forma estática en una aplicación
realizada en C#? Me cambiaría el código fuente de algún modo (utilizar
reflection, etc) ? Lo que quiero es que el archivo ejecutable contenga todos
los recursos y no precise de las librerías como archivos externos. En C++ NO
.NET se podía realizar el enlazado estático mediante la versión .lib de las
librerías.

Se puede hacer algo parecido en C#?

Saludos y gracias.
 

Leer las respuestas

#1 Pedro Luna Montalvo, MVP
02/02/2005 - 14:27 | Informe spam
Incrustar un ensamblado como un recurso de otro ensamblado, trae la
complicacion de programacion debido a que no estaras agregando una
referencia a dicho ensamblado, sino que deberas acceder a todos sus tipos
utilizando Reflection.

Por lo demas, no le veo inconvenientes:

// Obtener el Stream del recurso en el manifiesto que corresponde al
Assembly incrustado
Assembly miAssembly = Assembly.GetExecutingAssembly();
Stream inputStream = null;
inputStream miAssembly.GetManifestResourceStream("MiEnsambladoIncrustado.dll");

// Leer los datos binarios del recurso
int rawDataSize = (int) inputStream.Length;
byte[] rawAssemblyData = new byte[rawDataSize];
inputStream.Read(rawAssemblyData, 0, rawDataSize);

// Creo objeto el Assembly
Assembly miAssemblyIncrustado = Assembly.LoadFrom(rawAssemblyData);


y luego por medio de Reflection:

miAssemblyIncrustado.GetType("EspacioNombres.TipoEnAssembly")


Saludos
Pedro Luna, [MVP VB.NET]
Gye, Ecu




"Mario Cobretti" escribió en el mensaje
news:
Hola,

Es posible enlazar Dlls (assemblies) de forma estática en una aplicación
realizada en C#? Me cambiaría el código fuente de algún modo (utilizar
reflection, etc) ? Lo que quiero es que el archivo ejecutable contenga


todos
los recursos y no precise de las librerías como archivos externos. En C++


NO
.NET se podía realizar el enlazado estático mediante la versión .lib de


las
librerías.

Se puede hacer algo parecido en C#?

Saludos y gracias.



Preguntas similares