Compartir a través de


Nombres de ensamblado

El nombre de un ensamblado se almacena en metadatos y tiene un impacto significativo en el ámbito del ensamblado y en el uso de una aplicación. Un ensamblado con nombre seguro tiene un nombre completo que incluye el nombre del ensamblado, la referencia cultural, la clave pública, el número de versión y, 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 tiempo de ejecución usa la información de nombre para localizar el ensamblado y diferenciarlo de otros ensamblados 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 de procesador es msil, lo que significa que se compilará just-in-time (JIT) en código de 32 bits o código de 64 bits en función del sistema operativo y el procesador.

Sugerencia

La información ProcessorArchitecture permite versiones de ensamblajes específicas para el procesador. Puede crear versiones de un ensamblado cuya identidad solo difiere 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 fuertes. Para obtener más información, consulte AssemblyName.ProcessorArchitecture.

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

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

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

La versión corresponde al número de versión de todos los ensamblados de .NET Framework que se entregaron con la versión 1.0 de .NET Framework. Para 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.

Asignar nombre a los componentes de la aplicación

El tiempo de ejecución no tiene en cuenta el nombre de archivo al 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 denominado myAssembly.dll, el enlace se produce correctamente si ejecuta myAssembly.exe. Sin embargo, si otra aplicación ejecuta myAssembly.exe mediante el método AppDomain.ExecuteAssembly, el tiempo de ejecución determina que myAssembly ya se ha cargado cuando myAssembly.exe solicitudes de enlace a myAssembly. En este caso, myAssembly.dll nunca se carga. Dado que myAssembly.exe no contiene el tipo solicitado, se produce una TypeLoadException.

Para evitar este problema, asegúrese de que los ensamblados que componen la aplicación no tienen el mismo nombre de ensamblado o colocan ensamblados con el mismo nombre en directorios diferentes.

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 ensamblado, no incluida la extensión de nombre de 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 solo en el directorio de la aplicación raíz pueden tener un nombre de ensamblado diferente del nombre de archivo.

Consulte también