Nombres de ensamblado

Un nombre de ensamblado se almacena en los metadatos y tiene un importante impacto en el ámbito del ensamblado y en su uso por parte de una aplicación. Un ensamblado con nombre seguro tiene un nombre completo que incluye el nombre, la referencia cultural, la clave pública y el número de versión; opcionalmente, la arquitectura del procesador. Use la propiedad FullName para obtener el nombre completo de los ensamblados cargados, que normalmente se denomina nombre para mostrar.

El entorno de ejecución usa la información del nombre para buscar el ensamblado y distinguirlo de otros con el mismo nombre. Por ejemplo, un ensamblado con nombre seguro llamado myTypes podría tener el siguiente nombre completo:

myTypes, Version=1.0.1234.0, Culture=en-US, PublicKeyToken=b77a5c561934e089c, ProcessorArchitecture=msil

En este ejemplo, el nombre completo indica que el ensamblado myTypes tiene un nombre seguro con un token de clave pública, el valor de referencia cultural del inglés de Estados Unidos y un número de versión 1.0.1234.0. Su arquitectura del procesador es msil, lo que significa que será una compilación JIT (Just-In-Time) para código de 32 o 64 bits, según el sistema operativo y el procesador.

Sugerencia

La información de ProcessorArchitecture permite versiones específicas del procesador de los ensamblados. Puede crear versiones de un ensamblado cuya identidad solo se diferencie por la arquitectura del procesador, por ejemplo versiones específicas del procesador de 32 y 64 bits. La arquitectura del procesador no es necesaria para los nombres seguros. Para obtener más información, vea AssemblyName.ProcessorArchitecture.

El código que solicite tipos en un ensamblado debe usar un nombre completo de ensamblado. Esto se denomina enlace completo. No se permite el enlace parcial, que especifica solo un nombre de ensamblado, al hacer referencia a ensamblados de .NET Framework.

Todas las referencias a los ensamblados que componen .NET Framework también deben contener el nombre completo del ensamblado. Por ejemplo, una referencia al ensamblado System.Data de .NET Framework para la versión 1.0 incluiría:

System.data, version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

La versión se corresponde al número de versión de todos los ensamblados de .NET Framework incluidos con la versión 1.0 de .NET Framework. En el caso de los ensamblados de .NET Framework, el valor de la referencia cultural siempre es neutro y la clave pública es la misma que se muestra en el ejemplo anterior.

Por ejemplo, para agregar una referencia de ensamblado en un archivo de configuración para configurar un agente de escucha de seguimiento, se incluiría el nombre completo del ensamblado de .NET Framework del sistema:

<add name="myListener" type="System.Diagnostics.TextWriterTraceListener, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" initializeData="c:\myListener.log" />

Nota

El runtime trata los nombres de ensamblado sin distinción entre mayúsculas y minúsculas al enlazar a un ensamblado, pero conserva las minúsculas y mayúsculas que se usan en un nombre de ensamblado. Varias herramientas de Windows SDK controlan los nombres de ensamblado sin distinción entre mayúsculas y minúsculas. Para obtener mejores resultados, administre los nombres de ensamblado con distinción entre mayúsculas y minúsculas.

Componentes de la aplicación de nombre

El runtime no tiene en cuenta el nombre de archivo a la hora de determinar la identidad de un ensamblado. La identidad del ensamblado, que se compone del nombre del ensamblado, la versión, la referencia cultural y el nombre seguro, debe ser clara para el runtime.

Por ejemplo, si tiene un ensamblado denominado myAssembly.exe que hace referencia a un ensamblado llamado myAssembly.dll, el enlace se produce correctamente si ejecuta myAssembly.exe. Sin embargo, si otra aplicación ejecuta myAssembly.exe con el método AppDomain.ExecuteAssembly, el entorno de ejecución determina que myAssembly ya se ha cargado cuando myAssembly.exe solicita enlazar a myAssembly. En este caso, myAssembly.dll no se carga nunca. Como myAssembly.exe no contiene el tipo solicitado, se produce una excepción TypeLoadException.

Para evitar este problema, asegúrese de que los ensamblados que componen la aplicación no tengan el mismo nombre de ensamblado o coloque aquellos con el mismo nombre en directorios distintos.

Nota

En .NET Framework, si coloca un ensamblado con nombre seguro en la caché global de ensamblados, el nombre de archivo del ensamblado debe coincidir con el nombre del propio ensamblado (sin la extensión del nombre del archivo, como .exe o .dll). Por ejemplo, si el nombre de archivo de un ensamblado es myAssembly.dll, el nombre del ensamblado debe ser myAssembly. Los ensamblados privados implementados solamente en el directorio de la aplicación raíz pueden tener un nombre de ensamblado diferente al nombre de archivo.

Vea también