Cuando tenemos muchos proyectos de tipo libreria o cuando usamos muchas librerias de terceros al final podemos acabar con un gran numero de dlls , cuando lo que necesitamos tener una sola dll para subirla a un Nuget Repository o distribuirla en otras aplicaciones
Instalacion
Nuget package:
PM> Install-Package ilmerge
Configuración
Una vez instalado el package podremos encontrar el ejecutable ilmerge.exe dentro de la carpeta package, copiarlo dentro del directorio del proyecto
Uso
Tenemos un proyecto de libreria de clases MyLibrary la cual usa StructureMap.dll , StructureMap.AutoMocking.dll y Rhino.Mocks.dll, ejecutando la siguiente linea de comnandos se lograra unir todas las librerias en una sola dentro del directorio Deploy: MyLibrary.dll
ILMerge.exe /t:library /out:'Deploy/MyLibrary.dll'
'MyLibrary.dll'
'StructureMap.dll'
'StructureMap.AutoMocking.dll'
'Rhino.Mocks.dll'
Problemas comunes
Cuando distribuimos nuestra libreria puede ocurrir el siguiente problema, puede que en el proyecto donde se use nuestra dll también se este usando la misma libreria de un tercero que usamos previamente, lo cual originaria un problema de referencias en algunos casos, para resolver esto ilmerge provee el comando internalize para cambiar todos los metodos y clases public a internal y la posibilidad de excluir las dlls que querramos usando un archivo de texto
ILMerge.exe /t:library /internalize:'Build/ILMergeIncludes.txt' /out:'Deploy/MyLibrary.dll'
'MyLibrary.dll'
'StructureMap.dll'
'StructureMap.AutoMocking.dll'
'Rhino.Mocks.dll'
ILMergeIncludes.txt:
StructureMap
StructureMap.AutoMocking
Rhino.Mocks
De esta forma solo los metodos y clases de nuestra dll quedan públicas para ser usadas