c# - link - opencv visual studio 2017
Vinculación estática en C# (3)
Estoy trabajando en un módulo para un CMS. Este módulo se distribuye como una biblioteca de clase DLL.
Tengo varias bibliotecas de utilidades que me gustaría usar en este módulo. ¿Hay alguna forma en que pueda vincular estas bibliotecas de forma estática para no tener que distribuir varias DLL (distribuyendo así mis bibliotecas de utilidades por separado)?
Me gustaría tener solo una DLL.
¡La respuesta corta para esto es no! No puede vincular en un dll durante la compilación. No sé si hay alguna forma sutil de hacerlo, pero probablemente tendrías que distribuir los dlls junto con tu cms. La mejor forma de hacerlo es hacer algún tipo de redistribución.
Puede combinar sus muchos archivos 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 (de la página de descarga)
ILMerge es una utilidad para fusionar múltiples ensamblados .NET en un único ensamblado .NET. 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.
Si no desea utilizar ILMerge, consulte esta página:
Nota del editor : Jeffrey Richter aconseja colocar sus dlls en el archivo exe como recursos ( para cada archivo DLL que agregue, muestre sus propiedades y cambie su "Acción de compilación" a "Recurso incrustado" ). A continuación, se necesita un cargador de clases personalizado para que el ejecutable funcione ( En tiempo de ejecución, el CLR no podrá encontrar los ensamblados DLL dependientes, lo cual es un problema. Para solucionar esto, cuando la aplicación se inicialice, registre un método de devolución de llamada con el Evento ResolveAssembly de AppDomain ).
Asegúrese de cambiar la cadena resourceName
para que apunte a sus recursos reales. (por ejemplo, cambie AssemblyLoadingAndReflection
al nombre de su proyecto).