2009-12-02 21 views
12

Últimamente he estado trabajando en algunas pequeñas aplicaciones .NET que comparten algunos códigos comunes. El código tiene algunas interfaces introducidas para abstraer llamadas I/O para pruebas unitarias.¿Por qué C# no tiene bibliotecas estáticas de estilo C++?

Quería que las aplicaciones fueran EXEs independientes sin dependencias externas. Este parece ser el caso de uso perfecto para bibliotecas estáticas. Ahora que lo pienso, los proveedores de control de terceros también podrían beneficiarse de este modelo.

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

¿Hay alguna razón por la que los diseñadores de C# los omitieron?

Editar: Soy consciente de ILMerge pero no ofrece la misma conveniencia que las bibliotecas estáticas.

Respuesta

11

.NET de hecho es compatible con el equivalente moral de una biblioteca estática . Se llama netmodule (la extensión de archivo suele ser .netmodule). Lea más sobre esto en este blog post. Tenga en cuenta que no es bien compatible con la cadena de herramientas de compilación Visual Studio . Creo que extension methods son un problema también. ILMerge es la mejor herramienta para hacer esto hecho.

+0

Eso es muy interesante gracias. –

3

Esto no está directamente relacionado con C#, sino con todo el paraguas de .NET. Claro, es posible fusionar ensamblajes usando ILMerge, pero desafortunadamente todavía es un proyecto de investigación, pero al menos su licencia permite el uso para emprendimientos comerciales. Aparte de eso, el tiempo de ejecución (CLR) no se puede unir en un solo ejecutable, la plataforma de destino aún necesita instalar .NET.

Editar:

yo estaba escribiendo esto antes de editar su post con ILMerge. Podría estar equivocado, pero no hay beneficios adicionales al evitar el enlace dinámico estilo .NET en tiempo de ejecución. No hay nada de malo en unir los ensambles de satélite con el ejecutable. Microsoft no recomienda ponerlos en el GAC.

+0

Sé que no tiene ninguna desventaja, pero es más fácil poder dar un solo exe. –

1

El uso de libs estáticas tiene el inconveniente de que el proveedor de tiempo de ejecución (MS) no puede parchearlo.

Por ejemplo, si usa libs MFC estáticas y se encuentra un problema de securify u otro error en las bibliotecas estáticas de MFC, MS no puede parchearlo (el código ya está en su ejecutable). El uso compartido de Dlls permite un parche fácil en el nivel del sistema operativo sin que te importe.

Por supuesto que tener bibliotecas compartidas tiene un pequeño inconveniente: se toma una dependencia y deben estar instaladas en el sistema.

Cuestiones relacionadas