Nombres de ensambladoAssembly Names

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.An assembly's name is stored in metadata and has a significant impact on the assembly's scope and use by an application. Un ensamblado con nombre seguro tiene un nombre completo que incluye nombre, referencia cultural, clave pública y número de versión.A strong-named assembly has a fully qualified name that includes the assembly's name, culture, public key, and version number. Se conoce como el nombre para mostrar y en los ensamblados cargados puede obtenerse mediante la propiedad FullName.This is frequently referred to as the display name, and for loaded assemblies can be obtained by using the FullName property.

El runtime usa esta información para buscar el ensamblado y distinguirlo de otros ensamblados con el mismo nombre.The runtime uses this information to locate the assembly and differentiate it from other assemblies with the same name. Por ejemplo, un ensamblado con nombre seguro llamado myTypes podría tener el siguiente nombre completo:For example, a strong-named assembly called myTypes could have the following fully qualified name:

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

Nota

La arquitectura del procesador se ha agregado a la identidad del ensamblado en la versión 2.0 de .NET Framework para permitir versiones específicas de procesador de ensamblados.Processor architecture is added to the assembly identity in the .NET Framework version 2.0, to allow processor-specific versions of assemblies. 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.You can create versions of an assembly whose identity differs only by processor architecture, for example 32-bit and 64-bit processor-specific versions. La arquitectura del procesador no es necesaria para los nombres seguros.Processor architecture is not required for strong names. Para obtener más información, consulta AssemblyName.ProcessorArchitecture.For more information, see AssemblyName.ProcessorArchitecture.

En este ejemplo, el nombre completo indica que el ensamblado myTypes tiene un nombre seguro con un token de clave pública, tiene el valor de referencia cultural de inglés de los Estados Unidos y tiene un número de versión de 1.0.1234.0.In this example, the fully qualified name indicates that the myTypes assembly has a strong name with a public key token, has the culture value for US English, and has a version number of 1.0.1234.0. Su arquitectura del procesador es "msil", lo que significa que será compilado JIT (just-in-time) para código de 32 o 64 bits según el sistema operativo y el procesador.Its processor architecture is "msil", which means that it will be just-in-time (JIT)-compiled to 32-bit code or 64-bit code depending on the operating system and processor.

El código que solicite tipos en un ensamblado debe usar un nombre completo de ensamblado.Code that requests types in an assembly must use a fully qualified assembly name. Esto se denomina enlace completo.This is called fully qualified binding. No se permite el enlace parcial, que especifica solo un nombre de ensamblado, al hacer referencia a ensamblados de .NET Framework.Partial binding, which specifies only an assembly name, is not permitted when referencing assemblies in the .NET Framework.

Todas las referencias a los ensamblados que componen .NET Framework también deben contener un nombre completo del ensamblado.All assembly references to assemblies that make up the .NET Framework also must contain a fully qualified name of the assembly. Por ejemplo, para hacer referencia al ensamblado System.Data de .NET Framework para la versión 1.0 se incluiría:For example, to reference the System.Data .NET Framework assembly for version 1.0 would include:

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

Tenga en cuenta que la versión corresponde al número de versión de todos los ensamblados de .NET Framework incluidos con la versión 1.0 de .NET Framework.Note that the version corresponds to the version number of all .NET Framework assemblies that shipped with .NET Framework version 1.0. 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.For .NET Framework assemblies, the culture value is always neutral, and the public key is the same as shown in the above example.

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:For example, to add an assembly reference in a configuration file to set up a trace listener, you would include the fully qualified name of the system .NET Framework assembly:

<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.The runtime treats assembly names as case-insensitive when binding to an assembly, but preserves whatever case is used in an assembly name. Varias herramientas de Kit de desarrollo de software de Windows (SDK)Windows Software Development Kit (SDK) controlan los nombres de ensamblado sin distinción entre mayúsculas y minúsculas.Several tools in the Kit de desarrollo de software de Windows (SDK)Windows Software Development Kit (SDK) handle assembly names as case-sensitive. Para obtener mejores resultados, administre los nombres de ensamblado con distinción entre mayúsculas y minúsculas.For best results, manage assembly names as though they were case-sensitive.

Nombre de los componentes de la aplicaciónNaming Application Components

El runtime no tiene en cuenta el nombre de archivo a la hora de determinar la identidad de un ensamblado.The runtime does not consider the file name when determining an assembly's identity. 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.The assembly identity, which consists of the assembly name, version, culture, and strong name, must be clear to the 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 se ejecuta myAssembly.exe.For example, if you have an assembly called myAssembly.exe that references an assembly called myAssembly.dll, binding occurs correctly if you execute myAssembly.exe. Pero si otra aplicación ejecuta myAssembly.exe con el método AppDomain.ExecuteAssembly, el runtime determina que "myAssembly" ya se ha cargado cuando myAssembly.exe solicita enlazar a "myAssembly."However, if another application executes myAssembly.exe using the method AppDomain.ExecuteAssembly, the runtime determines that "myAssembly" is already loaded when myAssembly.exe requests binding to "myAssembly." En este caso, myAssembly.dll nunca se carga.In this case, myAssembly.dll is never loaded. Puesto que myAssembly.exe no contiene el tipo solicitado, se produce una TypeLoadException.Because myAssembly.exe does not contain the requested type , a TypeLoadException occurs.

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.To avoid this problem, make sure the assemblies that make up your application do not have the same assembly name or place assemblies with the same name in different directories.

Nota

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 (sin incluir la extensión de nombre de archivo, como .exe o .dll).If you put a strong-named assembly in the global assembly cache, the assembly's file name must match the assembly name (not including the file name extension, such as .exe or .dll). Por ejemplo, si el nombre de archivo de un ensamblado es myAssembly.dll, el nombre del ensamblado debe ser myAssembly.For example, if the file name of an assembly is myAssembly.dll, the assembly name must be 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.Private assemblies deployed only in the root application directory can have an assembly name that is different from the file name.

Vea tambiénSee Also

Determinar el nombre completo de un ensambladoHow to: Determine an Assembly's Fully Qualified Name
Creación de ensambladosCreating Assemblies
Ensamblados con nombre seguroStrong-Named Assemblies
Caché global de ensambladosGlobal Assembly Cache
Cómo el motor en tiempo de ejecución ubica ensambladosHow the Runtime Locates Assemblies
Programar con ensambladosProgramming with Assemblies