Share via


Como o Runtime Localiza Assemblies

Para implantar com êxito seu.NET Framework, você deve entender como o common language runtime localiza e vincula os assemblies que fazem backup de seu aplicativo. Por padrão, o tempo de execução tenta vincular-se com a versão exata de um assembly que o aplicativo foi compilado. Esse comportamento padrão pode ser substituído pelo arquivo de configuração.

O common language runtime executa uma série de etapas ao tentar localizar um assembly e resolver uma referência de assembly. Cada etapa é explicada nas seções a seguir. O termo probing é freqüentemente usado para descrever como o runtime localiza assemblies; refere-se ao conjunto de heurística, usado para localizar o assembly com base em seu nome e a cultura.

Observação

Você pode exibir informações de ligação no arquivo de log usando o Assembly Binding Log Viewer (Fuslogvw.exe), que está incluído na Windows Software Development Kit (SDK).

Iniciando o Bind.

O processo de localizar e vincular a um assembly começa quando o tempo de execução tenta resolver uma referência a outro assembly. Essa referência pode ser estático ou dinâmico. As referências de estático de registros do compilador nos metadados do manifesto assembly em tempo de compilação. Referências dinâmicas são construídas dinamicamente como resultado de chamar vários métodos, como System.Reflection.Assembly.Load.

A melhor maneira de fazer referência a um assembly é usar uma referência completa, incluindo o nome do assembly, versão, cultura e token de chave pública (se houver). O runtime usa essas informações para localizar o assembly, seguindo os passos descritos posteriormente nesta seção. O tempo de execução usa o mesmo processo de resolução, independentemente da referência para um assembly estático ou dinâmico.

Você também pode fazer referência a um assembly dinâmica, fornecendo o método de chamada com informações sobre o assembly, como, por exemplo, especificando o nome de assembly apenas parciais. Nesse caso, o diretório de aplicativo é pesquisado para o assembly e nenhuma outra verificação ocorre. Você faz uma referência parcial usando qualquer um dos vários métodos para carregar assemblies como System.Reflection.Assembly.Load ou System.AppDomain.Load.

Finalmente, você pode fazer uma referência dinâmica usando um método, como System.Reflection.Assembly.Load e fornecer apenas informações parciais; em seguida, qualificar a referência usando o <qualifyAssembly> o elemento no arquivo de configuração do aplicativo. Esse elemento permite que você forneça as informações de referência completa (nome, versão, cultura e, se aplicável, o token de chave público) em seu arquivo de configuração do aplicativo em vez de no seu código. Se você quiser qualificar totalmente uma referência a um assembly fora do diretório de aplicativo, ou se você quisesse fazer referência a um assembly no cache global de assemblies, mas você queria a conveniência de especificar a referência completa no arquivo de configuração em vez de no seu código, você usaria esta técnica.

Observação

Este tipo de referência parcial não deve ser usado com assemblies que são compartilhados entre vários aplicativos.Porque as configurações são aplicadas por aplicativo e não por conjunto, um assembly compartilhado usando esse tipo de referência parcial exigiria cada aplicativo usando o assembly compartilhado para as informações de qualificação em seu arquivo de configuração.

O runtime usa as seguintes etapas para resolver uma referência de assembly:

  1. Determina a versão correta do assembly examinando os arquivos de configuração aplicável, incluindo o arquivo de configuração do aplicativo, o arquivo de diretiva de editor e arquivo de configuração da máquina. Se o arquivo de configuração está localizado em uma máquina remota, o runtime deve localizar e baixar o arquivo de configuração do aplicativo.

  2. Verifica se o nome do assembly foi vinculado a antes de e, em caso afirmativo, usa o assembly carregado anteriormente. Se uma solicitação anterior para carregar o assembly que falhou, a solicitação falhou imediatamente sem tentar carregar o assembly.

    Observação

    O cache de falhas de ligação do assembly é novo na.NET Framework versão 2.0.

  3. Verifica a cache global de assemblies. Se o assembly for encontrado, o runtime usa este assembly.

  4. Testes para o assembly usando as seguintes etapas:

    1. Se a diretiva de configuração e o publisher não afeta a referência original e se a solicitação de ligação foi criada usando o Assembly.LoadFrom método, o runtime verifica as dicas de localização.

    2. Se um codebase é encontrado nos arquivos de configuração, o runtime verifica somente neste local. Se esse teste falhar, o tempo de execução determina que a falha na solicitação de ligação e nenhum outro probing ocorre.

    3. Investiga assembly usando os heurísticos descritos o seção de investigação. Se o assembly não for encontrado Após investigação, o runtime solicita o Windows Installer para fornecer o assembly. Isso funciona como um recurso de instalação sob demanda.

      Observação

    Não há nenhuma versão verificando para assemblies sem nomes fortes, nem o runtime verifica no cache global de assemblies para assemblies sem nomes fortes.

Consulte também

Conceitos

Etapa 1: Examinando os arquivos de configuração

Etapa 2: Verificando anteriormente Assemblies referenciados

Etapa 3: Verificando o Cache Global de assemblies

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

Referências de Assembly parcial

Implantando o.NET Framework e aplicativos