Nomes de assemblyAssembly names

Um nome de assembly é armazenado em metadados e tem um impacto significativo no escopo e uso do assembly por um aplicativo.An assembly's name is stored in metadata and has a significant impact on the assembly's scope and use by an application. Um assembly de nome forte tem um nome totalmente qualificado que inclui o nome, a cultura, a chave pública e o número de versão do assembly.A strong-named assembly has a fully qualified name that includes the assembly's name, culture, public key, and version number. Isso muitas vezes é chamado de nome de exibição, e para os assemblies carregados pode ser obtido usando a propriedade FullName.This is frequently referred to as the display name, and for loaded assemblies can be obtained by using the FullName property.

O runtime usa essas informações para localizar o assembly e diferenciá-lo de outros assemblies com o mesmo nome.The runtime uses this information to locate the assembly and differentiate it from other assemblies with the same name. Por exemplo, um assembly de nome forte chamado myTypes poderia ter o seguinte nome totalmente qualificado: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

Observação

A arquitetura do processador é adicionada à identidade do assembly na versão 2.0 do .NET Framework, para permitir versões específicas do processador de assemblies.Processor architecture is added to the assembly identity in the .NET Framework version 2.0, to allow processor-specific versions of assemblies. Crie versões de um assembly cuja identidade varie apenas pela arquitetura do processador, por exemplo, versões específicas de processador 32 bits e 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. A arquitetura do processador não é necessária para nomes fortes.Processor architecture is not required for strong names. Para obter mais informações, consulte AssemblyName.ProcessorArchitecture.For more information, see AssemblyName.ProcessorArchitecture.

Neste exemplo, o nome totalmente qualificado indica que o assembly myTypes tem um nome forte com um token de chave pública, tem o valor de cultura para inglês (EUA) e tem um número de versão 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. A arquitetura de seu processador é "msil", que significa que ele será compilado no modo JIT (just-in-time) para códigos de 32 bits ou 64 bits dependendo do sistema operacional e do processador.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.

O código que solicita tipos em um assembly deve usar um nome totalmente qualificado do assembly.Code that requests types in an assembly must use a fully qualified assembly name. Isso é chamado de associação totalmente qualificada.This is called fully qualified binding. A associação parcial, que especifica um nome de assembly, não tem permissão ao fazer referência a assemblies no .NET Framework.Partial binding, which specifies only an assembly name, is not permitted when referencing assemblies in the .NET Framework.

Todas as referências de assembly a assemblies que compõem o .NET Framework também devem conter o nome totalmente qualificado do assembly.All assembly references to assemblies that make up the .NET Framework must also contain the fully qualified name of the assembly. Por exemplo, uma referência ao assembly System. Data .NET Framework para a versão 1,0 incluiria:For example, a reference to the System.Data .NET Framework assembly for version 1.0 would include:

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

Observe que a versão corresponde ao número de versão de todos os assemblies do .NET Framework que acompanham o .NET Framework versão 1.0.Note that the version corresponds to the version number of all .NET Framework assemblies that shipped with .NET Framework version 1.0. Para assemblies do .NET Framework, o valor da cultura é sempre neutro, e a chave pública é a mesma mostrada no exemplo acima.For .NET Framework assemblies, the culture value is always neutral, and the public key is the same as shown in the above example.

Por exemplo, para adicionar uma referência de assembly em um arquivo de configuração a fim de configurar um ouvinte de rastreamento, você incluiria o nome totalmente qualificado do assembly do .NET Framework do 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" />

Observação

O runtime trata nomes de assembly sem diferenciar maiúsculas de minúsculas ao associar a um assembly, mas preserva qualquer caso usado em um nome de assembly.The runtime treats assembly names as case-insensitive when binding to an assembly, but preserves whatever case is used in an assembly name. Várias ferramentas no SDK do Windows lidam com nomes de assembly diferenciando maiúsculas de minúsculas.Several tools in the Windows SDK handle assembly names as case-sensitive. Para obter melhores resultados, gerencie nomes de assembly como se diferenciassem maiúsculas de minúsculas.For best results, manage assembly names as though they were case-sensitive.

Nomear componentes de aplicativosName application components

O runtime não considera o nome do arquivo ao determinar a identidade de um assembly.The runtime does not consider the file name when determining an assembly's identity. A identidade do assembly, composta pelo nome, versão, cultura e nome forte do assembly, deve ficar clara para o runtime.The assembly identity, which consists of the assembly name, version, culture, and strong name, must be clear to the runtime.

Por exemplo, se você tiver um assembly chamado myAssembly. exe que faz referência a um assembly chamado myAssembly. dll, a vinculação ocorrerá corretamente se você executar 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. No entanto, se outro aplicativo executar o myAssembly. exe usando o método AppDomain.ExecuteAssembly, o tempo de execução determinará que myAssembly já está carregado quando myAssembly. exe solicitará a associação 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. Nesse caso, myAssembly. dll nunca é carregado.In this case, myAssembly.dll is never loaded. Como o myAssembly. exe não contém o tipo solicitado, ocorre um TypeLoadException.Because myAssembly.exe does not contain the requested type, a TypeLoadException occurs.

Para evitar esse problema, verifique se os assemblies que compõem seu aplicativo não têm o mesmo nome de assembly ou colocam assemblies com o mesmo nome em diretórios diferentes.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.

Observação

Na .NET Framework, se você colocar um assembly de nome forte no cache de assembly global, o nome do arquivo do assembly deverá corresponder ao nome do assembly, não incluindo a extensão de nome de arquivo, como . exe ou . dll.In the .NET Framework, 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 exemplo, se o nome de arquivo de um assembly for myAssembly. dll, o nome do assembly deverá ser myAssembly.For example, if the file name of an assembly is myAssembly.dll, the assembly name must be myAssembly. Assemblies particulares implantados somente no diretório do aplicativo raiz podem ter um nome de assembly diferente do nome do arquivo.Private assemblies deployed only in the root application directory can have an assembly name that is different from the file name.

Consulte tambémSee also