Nomes de assembléia

O nome de um assembly é armazenado em metadados e tem um impacto significativo no escopo do assembly e no uso 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 da versão e, opcionalmente, a arquitetura do processador do assembly. Use a FullName propriedade para obter o nome totalmente qualificado, freqüentemente referido como o nome para exibição, para assemblies carregados.

O tempo de execução usa as informações de nome para localizar o assembly e diferenciá-lo de outros assemblies com o mesmo nome. Por exemplo, um assembly de 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 myTypes assembly 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.

Gorjeta

As ProcessorArchitecture informações permitem versões específicas do processador de montagens. 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 bits e 64 bits. A arquitetura do processador não é necessária para nomes fortes. Para obter mais informações, veja AssemblyName.ProcessorArchitecture.

O código que solicita tipos em um assembly deve usar um nome de assembly totalmente qualificado. Isso é chamado de vinculação totalmente qualificada. A vinculação parcial, que especifica apenas um nome de assembly, não é permitida ao fazer referência a assemblies no .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. 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 fornecidos com o .NET Framework versão 1.0. Para assemblies do .NET Framework, o valor de 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 para configurar um ouvinte de rastreamento, você incluiria o nome totalmente qualificado do assembly do sistema .NET Framework:

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

Nota

O tempo de execução trata nomes de assembly como insensíveis a maiúsculas e minúsculas quando vinculado a um assembly, mas preserva qualquer caso usado em um nome de assembly. Várias ferramentas no SDK do Windows manipulam nomes de assembly como diferenciadores de maiúsculas e minúsculas. Para obter melhores resultados, gerencie nomes de assembly como se diferenciassem maiúsculas de minúsculas.

Nomear componentes do aplicativo

O tempo de execução não considera o nome do arquivo ao determinar a identidade de um assembly. A identidade do assembly, que consiste no nome do assembly, versão, cultura e nome forte, deve ser clara para o tempo de execução.

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

Para evitar esse problema, certifique-se de que os assemblies que compõem seu aplicativo não têm o mesmo nome de assembly ou coloque assemblies com o mesmo nome em diretórios diferentes.

Nota

No .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. Por exemplo, se o nome de arquivo de um assembly for myAssembly.dll, o nome do assembly deverá ser myAssembly. Os assemblies privados implantados somente no diretório raiz do aplicativo podem ter um nome de assembly diferente do nome do arquivo.

Consulte também