Nomes de assembly
Um nome de assembly é armazenado em metadados e tem um impacto significativo no escopo e 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 essas informações para localizar o assembly e diferenciá-lo de outros assemblies com o mesmo nome. Por exemplo, um assembly de nome forte chamado myTypes
poderia 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. 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.
Dica
As informações ProcessorArchitecture
permitem versões específicas do processador de 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. A arquitetura do processador não é necessária para nomes fortes. Para obter mais informações, consulte AssemblyName.ProcessorArchitecture.
O código que solicita tipos em um assembly deve usar um nome totalmente qualificado do assembly. Isso é chamado de associação totalmente qualificada. A associação parcial, que especifica um nome de assembly, não tem permissão ao fazer referência a 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 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 que acompanham 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 denominado myAssembly.exe que faz referência a um assembly denominado 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 runtime determinará que myAssembly
já está carregado quando myAssembly.exe solicitar a associação ao myAssembly
. Nesse caso, myAssembly.dll nunca é carregado. Como myAssembly.exe não contém o tipo solicitado, ocorrerá uma 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.