Compartilhar via


Nomes de assembly

O nome de um assembly é armazenado em metadados e tem um impacto significativo no escopo e no uso do assembly por um aplicativo. Um assembly de nome forte tem um nome totalmente qualificado que inclui o nome, a cultura, a chave pública, o número de versão do assembly e, opcionalmente, a arquitetura do processador. Use a propriedade FullName para obter o nome totalmente qualificado, frequentemente chamado de nome de exibição, para assemblies carregados.

O runtime usa as informações de nome para localizar o assembly e diferenciá-lo de outros assemblies com o mesmo nome. Por exemplo, um conjunto com nome forte chamado myTypes pode ter o seguinte nome totalmente qualificado:

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

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 dos Estados Unidos e tem um número de versão de 1.0.1234.0. Sua arquitetura de processador é msil, o que significa que ele será compilado just-in-time (JIT) para código de 32 bits ou código de 64 bits, dependendo do sistema operacional e do processador.

Dica

As informações ProcessorArchitecture permitem versões específicas do processador de assemblies. Você pode criar versões de um assembly cuja identidade difere apenas pela arquitetura do processador, por exemplo, versões específicas do processador de 32 e 64 bits. A arquitetura do processador não é necessária para nomes fortes. Para obter mais informações, consulte AssemblyName.ProcessorArchitecture.

O código, quando solicita tipos em um assembly, deve usar um nome de assembly totalmente qualificado. Isso é chamado de vinculação totalmente qualificada. A associação parcial, que especifica apenas um nome de assembly, não é permitida ao referenciar assemblies no .NET Framework.

Todas as referências de assembly para os assemblies que compõem o .NET Framework devem conter também o nome totalmente qualificado do assembly. Por exemplo, uma referência ao assembly do System.Data .NET Framework para a versão 1.0 incluiria:

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

A versão corresponde ao número de versão de todos os assemblies do .NET Framework fornecidos com o .NET Framework versão 1.0. Para assemblies do .NET Framework, o valor da cultura é sempre neutro e a chave pública é a mesma mostrada no exemplo acima.

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:

<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. Várias ferramentas no SDK do Windows lidam com nomes de assembly diferenciando maiúsculas de minúsculas. Para obter melhores resultados, gerencie nomes de assembly como se diferenciassem maiúsculas de minúsculas.

Nomear componentes do aplicativo

O runtime não considera o nome do arquivo ao determinar a identidade de um assembly. A identidade do assembly, composta pelo nome, versão, cultura e nome forte do assembly, deve ficar clara para o runtime.

Por exemplo, se você tiver um assembly chamado myAssembly.exe que faça referência a um assembly chamado myAssembly.dll, a associação ocorrerá corretamente se você executar myAssembly.exe. No entanto, se outro aplicativo executar myAssembly.exe usando o método AppDomain.ExecuteAssembly, o tempo de execução determina que myAssembly já está carregado quando myAssembly.exe solicitar associação myAssembly. Nesse caso, myAssembly.dll nunca é carregado. Como myAssembly.exe não contém o tipo solicitado, ocorre um TypeLoadException .

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.

Observação

No .NET Framework, se você colocar um assembly de nome forte no cache de assembly global, o nome de arquivo do assembly deverá corresponder ao nome de assembly, não incluindo a extensão de nome de arquivo, como .exe ou .dll. Por exemplo, se o nome do arquivo de um assembly for myAssembly.dll, o nome do assembly deverá ser myAssembly. Assemblies particulares implantados somente no diretório do aplicativo raiz podem ter um nome de assembly diferente do nome do arquivo.

Consulte também