Vincular estáticamente en C#
-
09-06-2019 - |
Pregunta
Estoy trabajando en un módulo para un CMS.Este módulo se distribuye como una biblioteca de clases DLL.
Tengo varias bibliotecas de utilidades que me gustaría usar en este módulo.¿Hay alguna forma de vincular estas bibliotecas estáticamente para no tener que distribuir varias DLL (distribuyendo así mis bibliotecas de utilidades por separado)?
Me gustaría tener sólo una DLL.
Solución
Puede fusionar sus muchas DLL con ILMERGE:
http://research.microsoft.com/~mbarnett/ILMerge.aspx
No lo he probado yo mismo.Espero eso ayude.
Descarga aquí:
http://www.microsoft.com/downloads/details.aspx?familyid=22914587-B4AD-4EAE-87CF-B14AE6A939B0&displaylang=en
Breve descripción (desde la página de descarga)
ILMerge es una utilidad para fusionar múltiples ensamblados .NET en un único ensamblado .NET.Funciona tanto con archivos ejecutables como con archivos DLL y viene con varias opciones para controlar el procesamiento y el formato de la salida.Consulte la documentación adjunta para obtener más detalles.
Otros consejos
Si no desea utilizar ILMerge, consulte esta página:
Nota del editor:Jeffrey Richter recomienda colocar sus archivos DLL en un archivo exe como recursos (Para cada archivo DLL que agregue, muestre sus propiedades y cambie su "Acción de compilación" a "Recurso integrado".).Entonces se necesita un cargador de clases personalizado para que el ejecutable funcione (En tiempo de ejecución, CLR no podrá encontrar los ensamblados DLL dependientes, lo cual es un problema.Para solucionar este problema, cuando su aplicación se inicialice, registre un método de devolución de llamada con el evento ResolveAssembly del dominio de aplicación.).
Asegúrese de cambiar el resourceName
cadena para apuntar a sus recursos reales.(p.ej.cambiar AssemblyLoadingAndReflection
al nombre de su proyecto.)
La respuesta corta a esto es ¡no!No se puede vincular una DLL durante la compilación.No sé si hay alguna manera sutil de hacer esto, pero probablemente tendrías que distribuir los dlls junto con tus cms.La mejor manera de hacerlo es hacer algún tipo de redistribuible.