2011-08-04 31 views
6

Tengo un proyecto base que alimenta dos proyectos diferentes. Quiero poder hacer que el proyecto principal compile todas las referencias en un dll en tiempo de compilación.Compilar un proyecto C# en un dll

Esto debe ser algo que esté integrado en la construcción del proyecto para que los desarrolladores Jr no tengan que preocuparse por ello.


Solución: me terminó añadiendo una línea a la acción posterior a la generación del proyecto, de modo que una buena construcción hace lo siguiente:

$(ProjectDir)ilmerge.exe /out: /ver: <.dll> <.dll> 

ilmerge.exe se trasladó al proyecto y los anteriores line toma los dlls dados y crea uno.

+2

Bien, ¿cuál es su pregunta? Has etiquetado a ilmerge, que es una herramienta que puedes usar para hacer esto. ¿Tienes alguna pregunta sobre eso? – FishBasketGordo

+0

http://stackoverflow.com/questions/1829531/how-do-i-merge-multiple-net-assemblies-into-a-single-assembly – Damith

+0

Lo siento, sé cómo usar la herramienta con NuGenUnify, pero quiero sucede cuando compilo el proyecto. ¿Puedo agregar a ese proceso? – Arnej65

Respuesta

9

(esta respuesta fue editado para actualizar los enlaces a nuevas ubicaciones de descarga y para reflejar nuevos conocimientos)

Su mejor opción es utilizar Micorosoft's ILMerge. Solía ​​estar disponible como descarga separada de Microsoft Research (es no parte de VS o .NET SDK).

La original version se mantuvo hasta 2012. Ahora es una NuGet package, que es la mejor manera de obtenerla actualmente, y agregarla a su proyecto y crear el servidor.

Como alternativa, puede probar ILMerge GUI desde CodePlex, que proporciona una interfaz GUI para ILMerge. Su desarrollo fue interrumpido, pero ahora está activo de nuevo.

A Codeproject article on ILMerge explica más sobre cómo usarlo y explica algunos casos de uso. Un ejemplo del comando es:

ilmerge /target:winexe /out:AllInOne.exe NormalProgram.exe Lib1.dll Lib2.dll 

Como alternativa, puede utilizar Fody con Costura.Fody, como se explica en este SO response.


Nota (1): si es necesario fusionar los conjuntos de lado a lado (es decir, mezclar asambleas nativas de 64 bits y 32 bits), debe consultar this SO article on loading side-by-side assemblies dynamically.

Nota (2): para agregar esto como un paso integral en su proceso de compilación, vaya a Propiedades del proyecto> Eventos de construcción> haga clic en "Editar creación posterior" y complete el comando anterior. Haga clic en "Macros" para ver cómo hacer referencia al archivo o ensamblaje actual.

0

Puede utilizar ILMerge para la fusión de varios ensamblados:

ILMerge es una utilidad para la fusión de varias NET en un ensamblado de .NET sola. Funciona tanto en ejecutables como en archivos DLL y viene con varias opciones para controlar el procesamiento y el formato de la salida. Consulte la documentación adjunta para más detalles.

Puede combinar los conjuntos base y usar el conjunto resultante como referencia para sus otros proyectos.

Como alternativa, en lugar de dos proyectos, coloque su código compartido en un proyecto para obtener un solo ensamblaje de referencia.

Cuestiones relacionadas