2011-11-10 23 views
70

Estoy consumiendo mi pila de servicios mediante el proyecto EXE (tarea de inicio para la aplicación azul) porque he copiado la DLL de la pila de servicios & algunos archivos DLL de Azure en el proyecto EXE.¿Cómo combinar varios ensambles en uno?

dlls

Cuando construyo este proyecto EXE a continuación DLL Azure se incluirá con mi EXE pero DLL de pila de servicio no se incluirá con EXE, ya que el funcionamiento de mi EXE en cualquier máquina que necesito para copiar toda la pila de servicio DLL manualmente

he utilizado DLL de esta pila de servicio para utilizar

JsonServiceClient client = new JsonServiceClient(servicepath); 

¿Qué tengo que hacer para liado todos estos archivos DLL en mi EXE?

Respuesta

95

Tiene varias opciones:

O

  • uso alguna herramienta como SmartAssembly (comercial)
    puede integrar y combinar entre otras cosas (no hay necesidad de cambiar el código fuente)

O

  • code that yourself in less than 10 lines (cambio de código fuente gratuito pero mínimo)
    marque todas las dependencias necesarias como "recursos incorporados" e" - de esta manera que se incluyen en el archivo EXE ... Necesita configurar un controlador AssemblyResolve el cual en tiempo de ejecución lee de Recursos y devuelve los archivos DLL necesarios al tiempo de ejecución .NET ...
+3

¡Gracias por recordarme la solución de Jeffrey Richter de integrar ensamblajes! Vea mi respuesta mencionando [Costura] (https://github.com/Fody/Costura/) para una herramienta que combina esto con la inyección del código necesario. – CodeFox

26

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

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 su configuración del proyecto VS here

+0

Hola, puedo añadir recurso externo (archivo/imagen) en ejecutable? –

6

Trate ILMerge-GUI, the .NET merger. Es una interfaz gráfica de usuario basada en Ilmerge que evita todo el trabajo de línea de comandos.

+2

¡Fantástico! ¡Funcionó muy bien para mí! –

+1

Codeplex se está cerrando, así que aquí está el enlace del proyecto movido: https://bitbucket.org/wvd-vegt/ilmergegui – Hegi

2

Verifique el proyecto ServiceStack.Gap que muestra varios ejemplos de howto ILMerge ServiceStack en una plataforma multiplataforma .exe.

ServiceStack también incluye una serie de otras características que está particularmente bien adaptado para la creación de estas aplicaciones incrustado donde:

  • permite que sus servicios sean auto-organizada utilizando.NET HTTP Listener
  • Soporta pre-compilados Razor Vistas
  • Recursos Soporta Embedded
  • Soporta una base de datos integrada en SQLite y OrmLite
  • Puede ser ILMerged en un solo .exe
19

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

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

El resultado es una solución súper simple que simplemente requiere buscar Costura.Fody de NuGet.

Características:

  • Incluyendo los símbolos de depuración
  • inclusión/exclusión de montajes específicos
  • compresión de conjuntos integrados
  • otros (ver Readme)
+7

OMG Costura.Fody es la respuesta correcta. Instalé el paquete de nuget, reconstruí el proyecto y ahora tengo un EXE independiente ¡INCREÍBLE! –

+3

No puedo creer lo fácil que es. Simplemente instale paquetes de Nuget y listo. – iraSenthil

+1

Estoy usando Costura.Fody también. Es trivial configurarlo y es fácil incluir los paquetes NuGet como recursos. Obtener proyecto. –

2

Si tiene WPF dependencias de su las opciones pueden ser más limitadas ... ILMerge no parece tratar con estos. Costura.Fody (como lo mencionó Codefox arriba) funcionó perfectamente para nosotros, sin embargo, tomó aproximadamente 5 minutos para ponerse en marcha ... una muy buena experiencia.

Instalar con Nuget (seleccionando el proyecto predeterminado correcto en la consola de Package Manager).

Combina todas las DLL marcadas como "Copiar local" = verdadero y produce un .EXE fusionado (junto con el resultado estándar, la mayoría de los cuales ahora no es necesario) que también está comprimido. Esto se puede usar de forma independiente.

La licencia es MIT, por lo que puede modificar/distribuir según sea necesario.

https://github.com/Fody/Costura/

Cuestiones relacionadas