Pregunta

Últimamente he estado trabajando en unas pocas aplicaciones .NET pequeños que comparten un código común. El código tiene algunas interfaces introducidas abstraer E / S llama a la unidad de pruebas.

que quería que las aplicaciones se EXE independientes con dependencias externas. Este parece ser el caso de uso perfecto para bibliotecas estáticas. Ahora que lo pienso de ella proveedores de control de terceros podrían beneficiarse de este modelo también.

¿Hay algunas desagradables ocultas con las bibliotecas estáticas que me he perdido?

¿Hay alguna razón por la cual los diseñadores de C # los dejaron salir?

Edit: Estoy al tanto de ILMerge pero no ofrece la misma comodidad como bibliotecas estáticas

.
¿Fue útil?

Solución

.NET no, de hecho, apoyar el equivalente moral de una estática biblioteca. Se llama netmodule (extensión de archivo es generalmente .netmodule). Lea más sobre esto en este entrada de blog . Ten en cuenta que no está bien apoyado por el Visual Studio construir la cadena de herramientas. Creo métodos de extensión son una problema también. ILMerge es la mejor herramienta para conseguir este hecho.

Otros consejos

Esto no está directamente relacionado con C #, sino a todo el paraguas .NET. Claro, es posible fusionar montajes utilizando ILMerge , pero por desgracia todavía es un proyecto de investigación, pero al menos sus permisos de licencia de uso para actividades comerciales. Aparte de eso, el tiempo de ejecución (CLR) no puede ser fundieron en un solo ejecutable, la plataforma de destino todavía necesita .NET para ser instalado.

Editar:

yo estaba escribiendo esto antes de editar su post con ILMerge. Puedo estar equivocado, pero no hay beneficios adicionales de evitar la vinculación dinámica en el estilo .NET en tiempo de ejecución. No hay nada malo en poner los ensamblados satélite junto con el ejecutable. Microsoft no recomienda ponerlos en la GAC.

Uso libs estático tiene el inconveniente de que no es patchable por el proveedor de tiempo de ejecución (MS).

Por ejemplo, si utiliza bibliotecas MFC estáticas y una emisión de Securify u otro insecto se encuentra en las librerías estáticas MFC, MS no puede parche (el código ya está en su ejecutable). El uso compartido Dlls permite un parche fácil a nivel de sistema operativo sin que preocuparse por eso.

Por supuesto, tener bibliotecas compartidas tiene un pequeño inconveniente:. Una dependencia se toma y que debe estar instalado en el sistema

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top