Nomes de Assembly

Um nome de assembly é armazenado nos metadados e tem impacto significante no escopo do assembly e no uso por uma aplicação. Um assembly com strong-name tem um nome totalmente qualificado que inclui o nome do assembly, cultura, chave pública e o número da versão. Isso é frequentemente referido como o nome de exibição, e para conjuntos de módulos (assemblies) carregados pode ser obtido usando a propriedade FullName.

O ambiente de execução usa essa informação para localizar o assembly e diferenciá-lo de outros assemblies com o mesmo nome. Por exemplo, um conjunto de módulos (assembly) de nome de alta segurança denominado myTypes poderia ter o seguinte nome totalmente qualificado:

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

Observação

A arquitetura do processador é adicionada à identidade do assembly pelo .NET Framework versão 2.0, para permitir versões específicas de processador dos assemblies.Você pode criar versões de um assembly cuja identidade seja diferente somente na arquitetura do processador, por exemplo, versões específicas de processadores 32 bits e 64 bits.A arquitetura do processador não é obrigatória para strong names.Para obter mais informações, consulte AssemblyName.ProcessorArchitecture.

Neste exemplo, o nome totalmente qualificado indica que o myTypes assembly tem um nome forte com um token de chave pública, possui o valor de cultura para inglês (EUA) e tem um número de versão do 1.0.1234.0. Sua arquitetura de processador é "msil", o que significa que será compilado de forma just-in-time (JIT) para código de 32 bits ou 64 bits, dependendo do sistema operacional e processador.

Código que requisite tipos em um assembly devem usar um nome de assembly totalmente qualificado. Isso é chamado de associação totalmente qualificada. Associação parcial, que fornece somente um nome de assembly, não é permitida quando referencia assemblies no .NET Framework.

Todas referências de assembly para assemblies que compõem o .NET Framework também devem conter um nome totalmente qualificado do assembly. Por exemplo, para referenciar o assembly System.Data do .NET Framework da versão 1.0 seria incluído:

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

Perceba que a versão corresponde ao número da versão de todos os assemblies do .NET Framework que foram entregues com a versão 1.0 do .NET Framework. Para assemblies do .NET Framework, a cultura é sempre neutra e a chave pública é a mesma como mostrado no exemplo acima.

Por exemplo, para adicionar uma referência de assembly em um arquivo de configuração para configurar um trace listener, você incluiria o nome totalmente qualificado do assembly do .NET Framework:

<add name="myListener" type="System.Diagnostics.TextWriterTraceListener, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" initializeData="c:\myListener.log" />

Observação

O ambiente de execução trata nomes de assembly de forma não-sensível ao caso quando associado a um assembly, mas preserva qualquer caso se usado em um nome de assembly.Várias ferramentas na caixa Windows Software Development Kit (SDK) manipulam nomes de conjunto de módulos (assembly) diferenciando maiúsculas de minúsculas.Para melhores resultados, gerencie nomes de assembly como se fossem sensíveis ao caso.

Nomeando componentes de aplicativo

O ambiente de execução não considera o nome do arquivo quando determina a identidade do assembly.  A identidade do assembly, que consiste do nome do assembly, versão, cultura e strong name, deve ser clara para o ambiente de execução.

Por exemplo, se você tem um assembly chamado myAssembly.exe que referencia um assembly chamado myAssembly.dll, a ligação ocorre corretamente se você executar myAssembly.exe. No entanto, se outro aplicativo é executado usando o método de myAssembly.exe AppDomain.ExecuteAssembly, o tempo de execução determina que "myAssembly" já está carregada quando myAssembly.exe solicita a ligação de "myAssembly". Nesse caso, myAssembly.dll nunca é carregado. Porque myAssembly.exe não contém o tipo solicitado, uma TypeLoadException ocorre.

Para evitar esse problema, tenha certeza que os assemblies que compõem sua aplicação não tem o mesmo nome do assembly ou coloque assemblies com o mesmo nome em diretórios diferentes.

Observação

Se você colocar um assembly com strong-name no Global Assembly Cache, o nome de arquivo do assembly deve ser o mesmo que o nome do assembly (não incluindo a extensão do arquivo, como .exe ou .dll).Por exemplo, se o nome do arquivo de um assembly é myAssembly.dll, o nome do assembly deve ser myAssembly.Assemblies privados que ficam somente no diretório raiz da aplicação podem ter um nome de assembly que seja diferente do nome do arquivo.

Consulte também

Tarefas

Como: Determinar o nome totalmente qualificado de um Assembly

Conceitos

Criando assemblies

Assemblies de nomes fortes

Cache global de assemblies

Como o Runtime Localiza Assemblies

Outros recursos

Programação com assemblies