Strong named assemblies en VB.NET, C# y C++/CLI

¿De qué sirve tener "strong named assemblies"?

  1. Un "strong name" es único. Así, si una assembly tiene nombre único, todos los tipos definidos en ella tienen nombre único también.
  2. Las assemblies con nombre débil sólo pueden ser encontradas si se las coloca en el directorio de la aplicación o en subdirectorios especiales (como System32). Las assemblies con nombre fuerte tienen más posibilidades (más sobre eso en próximos posts).
  3. Cuando se busca una dll en tiempo de ejecución, se comparan Nombre, Cultura y Public Key Token. El número de versión sólo se considera cuando la dll buscada es strongly named. Esto busca resolver el DLL Hell y proveer un sistema de versionado más sólido. Si la versión buscada no coincide, la dll no se carga.
  4. Para que el FxCop y sus amigos no rompan los quinotos :P

Al menos en el Visual Studio 2008 es muy fácil hacer que un proyecto de VB.NET o C# genere una assembly con nombre fuerte. La idea es tener un archivo con una clave de criptografía pública (Public Key Token) y referenciarlo desde el proyecto.

Una advertencia: Las assemblies Manejadas puras con strong name (C#, VB.NET, etc) sólo pueden referenciar assemblies Manejadas o Mixtas con strong name (C#, VB.NET, C++/CLI, etc). No hay problema si se referencia una assembly nativa/no manejada sin strong name.

Instrucciones para proyectos manejados (MSDN)

Instrucciones para proyectos C++/CLI (es un poquito menos directo)

Comments

Popular posts from this blog

VB.NET: Raise base class events from a derived class

Apache Kafka - I - High level architecture and concepts

C++/CLI: Convert a String to BSTR or some other nasty stuff