c# dll merge ilmerge

c# - Fusionar DLL en EXE?



merge ilmerge (13)

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 here , y here , 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!


  1. 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.


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): 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

  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!


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


Descargar

ILMerge

Llamada

ilmerge /target:winexe /out:c:/output.exe c:/input.exe C:/input.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


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; }; } }


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)


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.

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


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


Usa Costura.Fody .

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


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 programa (x86) / Microsoft / ILMerge Preess Enter
  4. C: / Archivos de programa (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 programa (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


static class Program { /// <summary> /// The main entry point for the application. /// </summary> [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"