2011-01-08 23 views
6

Tengo una DLL que almacena las clases comunes a dos aplicaciones. Me gustaría mantener mi aplicación limitada a un archivo EXE y me gustaría ver si de alguna manera puedo insertar esta DLL dentro de mi EXE principal.¿Es posible combinar una DLL en un EXE .NET?

¿Cómo puedo incluir la DLL externa en mi aplicación? (Si es posible)

+1

Se cambió el título porque la inyección de DLL es un término sobrecargado. –

Respuesta

9

Una alternativa a ILMerge es incrustar ensamblajes dependientes en el ejecutable como recursos integrados y aprovechar el mecanismo assembly resolve para cargarlos como flujos de recursos. Un ejemplo de cómo hacer esto se puede encontrar aquí:

http://blog.magenic.com/blogs/brante/archive/2008/04/14/Embedded-Assembly-Linker.aspx

que utilizan este patrón a mí mismo que funciona bien. ILMerge a veces tiene problemas por lo que su kilometraje puede variar.

+0

¿por qué uno haría esto por usar ILMerge? –

+1

@Pauli Como mencioné, ILMerge tiene problemas con algunos escenarios, p. tiene dificultades con algunos tipos de ofuscación (tenemos ensamblajes ofuscados), tiene problemas con los recursos Xaml de WPF, tiene problemas para fusionar varios ensamblados WPF ya que el compilador Xaml coloca un tipo de ayuda en cada ensamblado con el mismo nombre en el mismo espacio de nombres que causa ILMerge para vomitar en tipos duplicados. Estos son solo los que he cruzado personalmente. –

+0

es cierto que tener tipos con el mismo nombre completo (namespace + typename) da problemas ... ¿no sabía que estaba permitido cargar varios ensamblados que contenían tipos con el mismo nombre completo en un dominio de aplicaciones como este? Sin embargo, es un buen truco, ya que permite tener montajes almacenados en una base de datos o descargados a través de Internet. –

1

Eazfuscator.NET es una maravillosa herramienta que también permite la fusión dll e incrustación, así como sus funciones de ofuscación normales. También hace una buena optimización en el código ofuscado. En lugar de jugar con Ilmerge, simplemente agrega una anotación de clase y eazfuscator hará todo por ti. ¡Es maravilloso!

[assembly: System.Reflection.Obfuscation(Feature = "encrypt symbol names with password PAS$", Exclude = false)] 
[assembly: System.Reflection.Obfuscation(Feature = "embed nLog.dll", Exclude = false)] 
public class MyClass { 
    //blah 
} 
+1

¿Dónde se encuentra la salida del Eazfuscator? – Vikneshwar

+1

Eazfuscator, cuando se integra con Visual Studio, solo funciona en el lugar en la salida del compilador. Entonces, lo que sea que esté en su carpeta bin/Release. También puede crear una secuencia de comandos manualmente con msbuild si desea hacer algo personalizable. – scaryman

+0

@scaryman ¿Puede revelar presencia/ausencia de afiliación cuando usa 'maravilloso', por favor? (No digo que sea nada más que eso - la ausencia de tal afiliación lo haría subir en mi estimación * como lo revelaría *) –

Cuestiones relacionadas