¿Cómo combinar varios ensamblados en uno?


Estoy consumiendo mi pila de servicios usando el proyecto EXE (tarea de inicio para la aplicación azure) en el que he copiado la siguiente DLL de la pila de servicios y algunas DLL de Azure en el proyecto EXE.

DLL

Cuando compilo este proyecto EXE, las DLL de Azure se agruparán con mi EXE, pero el DLL de la pila de servicios no se agrupará con EXE, porque para ejecutar mi EXE en cualquier máquina necesito copiar manualmente todo el DLL de la pila de servicios.

He utilizado el dll de esta pila de servicios para usar

JsonServiceClient client = new JsonServiceClient(servicepath);

¿Qué debo hacer para incluir todos estos archivos DLL en mi EXE?

Author: BartoszKP, 2011-11-10

6 answers

Tienes varias opciones:

O

  • use alguna herramienta como SmartAssembly (comercial)
    puede incrustar y fusionar entre otras cosas (no es necesario cambiar el código fuente)

O

  • código que usted mismo en menos de 10 líneas (cambio de código fuente libre pero mínimo)
    marcar todas las dependencias necesarias como " recurso incrustado" - de esta manera se incluyen en el archivo EXE... necesita configurar un AssemblyResolve manejador que en tiempo de ejecución lee los recursos y devuelve los archivos DLL necesarios al tiempo de ejecución de.NET...
 103
Author: Yahia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-10 12:04:59

La herramienta que está buscando se llama ILMerge . Es una herramienta de línea de comandos y se puede usar así:

ilmerge /target:winexe /out:MyApp.exe 
        MyExe.exe ServiceStack.dll ServiceStack.Interfaces.dll ServiceStack.ServiceInterface.dll  ServiceStack.Text.dll

También hay un artículo que describe cómo incluir ILMerge en la configuración del proyecto VS aquí

 28
Author: yas4891,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-10 11:41:27

Una gran herramienta para incluir ensamblados referenciados como recursos incrustados es Costura (a Fody add-in). El autor Simon Kropp lo describe de la siguiente manera:

[...] una combinación de dos métodos:

El resultado es un super solución simple que solo requiere buscar Costura.Fody de NuGet.

Características:

  • Incluyendo símbolos de depuración
  • Compresión de conjuntos embebidos
  • Incluidos / excluidos conjuntos específicos
  • Otros (véase Léame )
 22
Author: CodeFox,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-23 04:56:37

Prueba ILMerge-GUI, la fusión de.NET. Es una interfaz gráfica basada en Ilmerge que evita todo el trabajo de la línea de comandos.

 6
Author: Pritam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-23 04:37:31

Si tiene dependencias WPF, sus opciones pueden ser más limitadas..... ILMerge no parece ocuparse de esto. Costura.Fody (como se mencionó anteriormente por Codefox) funcionó perfectamente para nosotros sin embargo y tomó unos 5 minutos para ponerse en marcha... una muy buena experiencia.

Instalar con Nuget (seleccionando el proyecto predeterminado correcto en la consola del Administrador de paquetes).

Fusiona todas las DLL marcadas como "Copy Local" = true y produce una combinación.EXE (junto con la salida estándar, la mayoría de los cuales es ahora no es necesario) que también se comprime. Esto se puede utilizar de forma independiente.

La licencia es MIT para que pueda modificar/distribuir según sea necesario.

Https://github.com/Fody/Costura /

 3
Author: rexall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-13 14:21:42

Comprueba el ServiceStack.Proyecto Gap que muestra varios ejemplos de cómo ILMerge ServiceStack en una sola plataforma cruzada .exe .

ServiceStack también incluye una serie de otras características que son particularmente adecuadas para estos creando aplicaciones incrustadas donde:

  • Permite que sus servicios sean auto-alojados usando el Oyente HTTP de. NET
  • Soporta Vistas Razor precompiladas
  • Soporta Recursos Embebidos
  • Soporta un embebido base de datos en Sqlite y {lite
  • Se puede fusionar en un solo.exe
 2
Author: mythz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-26 13:12:04