Fusionar DLL en EXE?

Tengo dos archivos DLL que me gustaría incluir en mi archivo EXE para que sea más fácil distribuirlo. He leído un poco aquí y allá cómo hacer esto, incluso encontré un buen hilo aquí , y aquí , pero es demasiado complicado para mí y necesito instrucciones básicas reales sobre cómo hacer esto.

Estoy usando Microsoft Visual C # Express 2010, y disculpe mi pregunta de “bajo nivel”, pero me siento como si estuviera uno o dos niveles por debajo del experimento de todos: – / Si alguien pudiera señalar cómo fusionar estos archivos DDL en mi EXE en una guía paso a paso, ¡esto sería realmente increíble!

Para .NET Framework 4.5

ILMerge.exe /target:winexe /targetplatform:"v4,C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0" /out:finish.exe insert1.exe insert2.dll 

ILMerge

  1. Abra CMD y cd en su directorio. Digamos: cd C:\test
  2. Inserta el código de arriba.
  3. /out:finish.exe reemplace finish.exe con cualquier nombre de archivo que desee.
  4. Detrás de /out:finish.exe tiene que dar los archivos que desea combinar.

Descarga ilmerge e ilmergre gui . hace que unir los archivos sea tan fácil, los he usado y funciona muy bien

Haga referencia a las DLL a sus recursos y use AssemblyResolve-Event para devolver la DLL de recursos.

 public partial class App : Application { public App() { AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => { Assembly thisAssembly = Assembly.GetExecutingAssembly(); //Get the Name of the AssemblyFile var name = args.Name.Substring(0, args.Name.IndexOf(',')) + ".dll"; //Load form Embedded Resources - This Function is not called if the Assembly is in the Application Folder var resources = thisAssembly.GetManifestResourceNames().Where(s => s.EndsWith(name)); if (resources.Count() > 0) { var resourceName = resources.First(); using (Stream stream = thisAssembly.GetManifestResourceStream(resourceName)) { if (stream == null) return null; var block = new byte[stream.Length]; stream.Read(block, 0, block.Length); return Assembly.Load(block); } } return null; }; } } 

Usa Costura.Fody .

Solo tienes que instalar el nuget y luego hacer una comstackción . El ejecutable final será independiente .

Descargar

ILMerge

Llamada

 ilmerge /target:winexe /out:c:\output.exe c:\input.exe C:\input.dll 
  1. Instala ILMerge como los otros hilos te dicen

  2. A continuación, vaya a la carpeta de instalación, de forma predeterminada C:\Program Files (x86)\Microsoft\ILMerge

  3. Arrastre su Dll y Exes a esa carpeta

  4. Shift-Right haga clic en esa carpeta y elija abrir símbolo del sistema

  5. Escribir

     ilmerge myExe.exe Dll1.dll /out:merged.exe 

    Tenga en cuenta que primero debe escribir su exe.

Ahí tienes tu exe fusionado. Esta podría no ser la mejor manera si vas a hacer esto varias veces, pero la más simple para un uso único, te recomendaría poner a Ilmerge en tu camino.

 static class Program { ///  /// The main entry point for the application. ///  [STAThread] static void Main() { /* PUT THIS LINE IN YOUR CLASS PROGRAM MAIN() */ AppDomain.CurrentDomain.AssemblyResolve += (sender, arg) => { if (arg.Name.StartsWith("YOURDLL")) return Assembly.Load(Properties.Resources.YOURDLL); return null; }; Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } 

Primero agregue las DLL a su proyecto-Recursos. Agregar una carpeta “Recursos”

También puede usar ilmergertool en codeplex con interfaz GUI.

Respondí una pregunta similar para VB.NET . Sin embargo, no debería ser demasiado difícil de convertir. Incrustas las DLL's en tu carpeta de Ressource y en el primer uso, el evento AppDomain.CurrentDomain.AssemblyResolve se desencadena.

Si desea referenciarlo durante el desarrollo, simplemente agregue una referencia DLL normal a su proyecto.

Incrustar una DLL en un proyecto

Aquí está la documentación oficial . Esto también se descarga automáticamente en el paso 2.

A continuación se muestra una forma muy simple de hacerlo y he creado mi aplicación con éxito usando .NET framework 4.6.1

  1. Instale el paquete nuget de ILMerge ya sea a través de la interfaz gráfica de usuario o la línea de comando:

     Install-Package ilmerge 
  2. Verifique que lo haya descargado. Ahora instala (no estoy seguro del comando para esto, solo ve a tus paquetes nuget): enter image description here Nota: Probablemente solo necesite instalarlo para una de sus soluciones si tiene múltiples

  3. Navega a la carpeta de la solución y en la carpeta de paquetes deberías ver ‘ILMerge’ con un ejecutable:

     \FindMyiPhone-master\FindMyiPhone-master\packages\ILMerge.2.14.1208\tools 

    enter image description here

  4. Ahora aquí está el ejecutable que puede copiar en su \bin\Debug (o donde esté construida su aplicación) y luego en commandline / powershell haga algo como a continuación:

     ILMerge.exe myExecutable.exe myDll1.dll myDll2.dll myDlln.dll myNEWExecutable.exe 

¡Ahora tendrá un nuevo ejecutable con todas sus bibliotecas en uno!

NOTA: si intenta cargar un ensamblado que no sea de ILOnly, entonces

 Assembly.Load(block) 

no funcionará, y se lanzará una excepción: más detalles

Superé esto creando un archivo temporal y usando

 Assembly.LoadFile(dllFile) 

Encontré la solución a continuación son los Stpes: –

  1. Descargue ILMerge.msi e instálelo en su máquina.
  2. Abrir símbolo del comando
  3. escriba cd C: \ Archivos de progtwig (x86) \ Microsoft \ ILMerge Preess Enter
  4. C: \ Archivos de progtwig (x86) \ Microsoft \ ILMerge> ILMerge.exe / destino: winexe /targetplatform:”v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 “/out:NewExeName.exe SourceExeName.exe DllName.dll

Para Dll Múltiple: –

C: \ Archivos de progtwig (x86) \ Microsoft \ ILMerge> ILMerge.exe / destino: winexe /targetplatform:”v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 “/out:NewExeName.exe SourceExeName.exe DllName1.dll DllName2.dll DllName3.dll

El comando debe ser el siguiente script:

 ilmerge myExe.exe Dll1.dll /target:winexe /targetplatform:"v4,c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\" /out:merged.exe /out:merged.exe