Partilhar via


Etapa 4: Localizando que o Assembly através de bases de código ou investigação

Após a versão correta do assembly tiver sido determinada usando as informações de referência do assembly de chamada e nos arquivos de configuração, e depois ele deu no global assembly cache (apenas para assemblies de nome forte), o common language runtime tenta localizar o assembly. O processo de localização de um assembly envolve as seguintes etapas:

  1. Se um <codeBase> elemento encontrado no arquivo de configuração do aplicativo, o runtime verifica o local especificado. Se uma correspondência for encontrada, o assembly é usado e nenhuma investigação ocorre. Se o assembly não for encontrado, haverá falha na solicitação de ligação.

  2. O tempo de execução e testes para o assembly referenciado usando as regras especificadas posteriormente nesta seção.

Observação

Se você tiver várias versões de um assembly em um diretório e você deseja fazer referência a uma determinada versão do assembly, você deve usar o <codeBase> elemento em vez da privatePath atributo o <probing> elemento.Se você usar o <probing> elemento, o runtime deixa de verificar a na primeira vez que ele encontra um assembly que coincide com o nome simples do assembly referenciado, seja ela uma correspondência correta ou não.Se for uma correspondência correta, o assembly é usado.Se não for uma correspondência correta, paradas de investigação e ligação falhar.

Localizando o Assembly através de bases de código

Codebase informações podem ser fornecidas usando um <codeBase> o elemento em um arquivo de configuração. Esta base de código sempre é verificada antes de tentativas de runtime para investigar o assembly referenciado. Se um arquivo de diretiva de editor contendo o redirecionamento de versão final também contém um <codeBase> elemento, que <codeBase> elemento é o que é usado. Por exemplo, se o seu arquivo de configuração do aplicativo especifica uma <codeBase> elemento e um arquivo de diretiva de editor que está substituindo as informações do aplicativo também especifica uma <codeBase> elemento, o <codeBase> o elemento no arquivo de diretiva de Editor é usado.

Se nenhuma correspondência for encontrada no local especificado pelo <codeBase> elemento, a solicitação bind falhará e nenhuma outra etapa será efetuada. Se o tempo de execução determina se um assembly coincide com os critérios do assembly de chamada, ele usa esse assembly. Quando o arquivo especificado pelo determinado <codeBase> elemento é carregado, o runtime verifica para certificar-se de que o nome, versão, cultura e chave pública correspondem o assembly da chamada de referência.

Observação

Os assemblies referenciados fora do diretório raiz do aplicativo deve ter nomes fortes e deve ser instalados no cache global de assemblies ou especificado usando o <codeBase> elemento.

Localizando o Assembly por meio de investigação

Se não houver nenhum <codeBase> o elemento no arquivo de configuração do aplicativo, o runtime investiga assembly usando quatro critérios:

  • Base do aplicativo, que é o local da raiz onde o aplicativo está sendo executado.

  • Cultura, o atributo de cultura do assembly referenciado.

  • Nome, que é o nome do assembly referenciado.

  • O privatePath atributo o <probing> elemento, que é a lista de subdiretórios em um local da raiz definido pelo usuário. Este local pode ser especificado no arquivo de configuração do aplicativo e em código gerenciado usando o AppendPrivatePath a propriedade para um domínio de aplicativo. Quando especificado no código gerenciado, o código gerenciado privatePath é analisada pela primeira vez, seguido do caminho especificado no arquivo de configuração do aplicativo.

A Base do aplicativo e os diretórios de cultura de investigação

O runtime sempre começa a investigação na base de dados do aplicativo, que pode ser uma URL ou diretório da raiz do aplicativo em um computador. Se o assembly referenciado não for encontrado na base do aplicativo e nenhuma informação de cultura for fornecida, o runtime procura todas as subpastas com o nome do assembly. Os diretórios analisados incluem:

   [base do aplicativo] / [nome do assembly]. dll

   [base do aplicativo] / [nome do assembly] / [nome do assembly]. dll

Se as informações de cultura for especificadas para o assembly referenciado, somente os seguintes diretórios serão investigados:

   [base do aplicativo] / [cultura] / [nome do assembly]. dll

   [base do aplicativo] / [cultura] / [nome do assembly] / [nome do assembly]. dll

A sondagem com o atributo de privatePath

Juntamente com os subdiretórios de cultura e as subpastas nomeadas para o assembly referenciado, o runtime também investiga diretórios especificados usando o privatePath atributo o <probing> elemento. Os diretórios especificados usando o privatePath atributo deve ser subdiretórios do diretório de raiz. do aplicativo Os diretórios analisados variam dependendo se as informações de cultura estão incluídas na solicitação do assembly referenciado.

O tempo de execução pára na primeira vez que ele encontra um assembly que coincide com o nome simples do assembly referenciado, seja ela uma correspondência correta ou não de investigação. Se for uma correspondência correta, o assembly é usado. Se não for uma correspondência correta, paradas de investigação e ligação falhar.

Se a cultura for incluída, os seguintes diretórios serão investigados:

   [base do aplicativo] / [binpath] / [cultura] / [nome do assembly]. dll

   [base do aplicativo] / [binpath] / [cultura] / [nome do assembly] / [nome do assembly]. dll

Se as informações de cultura não for incluídas, os seguintes diretórios serão investigados:

   [base do aplicativo] / [binpath] / [nome do assembly]. dll

   [base do aplicativo] / [binpath] / [nome do assembly] / [nome do assembly]. dll

Exemplos de investigação.

Considerando as seguintes informações:

O tempo de execução testes seguintes URLs:

   http://www.Code.microsoft.com/de/MyAssembly.dll

   http://www.Code.microsoft.com/de/myAssembly/MyAssembly.dll

   http://www.Code.microsoft.com/bin/de/MyAssembly.dll

   http://www.Code.microsoft.com/bin/de/myAssembly/MyAssembly.dll

Vários Assemblies com o mesmo nome.

O exemplo a seguir mostra como configurar vários assemblies com o mesmo nome.

   <dependentAssembly>
      <assemblyIdentity name="Server" publicKeyToken="c0305c36380ba429" /> 
         <codeBase version="1.0.0.0" href="v1/Server.dll"/>
         <codeBase version="2.0.0.0" href="v2/Server.dll"/>
   </dependentAssembly>

Outros locais analisados

Local do assembly pode ser determinada utilizando o contexto atual de ligação. Isso normalmente ocorre quando o Assembly.LoadFrom método é usado e, em cenários de interoperabilidade COM. Se um assembly usa o LoadFrom método para fazer referência a outro assembly, o local de chamada do assembly é considerado como uma dica sobre onde encontrar o assembly referenciado. Se uma correspondência for encontrada, o assembly foi carregado. Se nenhuma correspondência for encontrada, o tempo de execução continua com sua semântica de pesquisa e em seguida, o Windows Installer para fornecer o assembly de consulta. Se nenhum assembly for fornecido, que corresponda à solicitação de ligação, uma exceção é lançada. Essa exceção é um TypeLoadException em código gerenciado, se um tipo foi referenciado, ou um FileNotFoundException se um assembly que está sendo carregado não foi encontrado.

Por exemplo, se Assembly1 faz referência a Assembly2 e Assembly1 tiver sido baixado de http://www.code.microsoft.com/utils, esse local é considerado para ser uma dica sobre onde encontrar Assembly2.dll. O tempo de execução e testes para o assembly em http://www.code.microsoft.com/utils/Assembly2.dll e http://www.code.microsoft.com/utils/Assembly2/Assembly2.dll. Se Assembly2 não for encontrado em um desses locais, o runtime consultará o Windows Installer.

Consulte também

Conceitos

Como o Runtime Localiza Assemblies

Etapa 1: Examinando os arquivos de configuração

Etapa 2: Verificando anteriormente Assemblies referenciados

Etapa 3: Verificando o Cache Global de assemblies

Referências de Assembly parcial