Partilhar via


bindingFailure MDA

The bindingFailure Assistente de depuração gerenciada (MDA) é ativado quando um assembly falha ao carregar.

Sintomas

Código tentou carregar um assembly usando uma referência estática ou um dos métodos de carregador, sistema autônomo Assembly.Load ou Assembly.LoadFrom. O assembly não está carregado e FileNotFoundException ou FileLoadException exceção é lançada.

Causa

Uma falha de vinculação ocorre quando o tempo de execução não é possível carregar um assembly.Uma falha de ligação pode ser resultado de uma das seguintes situações:

  • O common linguagem tempo de execução (CLR) não é possível encontrar o assembly solicitado.Há muitos motivos para que isso pode ocorrer, sistema autônomo o assembly não sendo instalado ou o aplicativo não seja configurado corretamente para encontrar o assembly.

  • Um cenário de problema comum está passando um tipo para Outros domínio de aplicativo, que requer que o CLR carregar o assembly que contém esse tipo no domínio do aplicativo.Não é possível para o tempo de execução carregar o assembly se domínio do aplicativo é configurado de forma diferente do domínio do aplicativo original.Por exemplo, os domínios de dois aplicativo podem ter diferentes BaseDirectory valores de propriedade.

  • O assembly solicitado está corrompido ou não é um assembly.

  • O código tentar carregar o assembly não tem as permissões de segurança de acesso do código correto para carregar assemblies.

  • As credenciais do usuário não fornecem as permissões necessárias para ler o arquivo.

Resolução

A primeira etapa é determinar por que o CLR não foi possível BIND ao conjunto de módulos (assembly) solicitado.Existem várias razões por que o tempo de execução talvez não tenha encontrado ou foi capaz de carregar o assembly solicitado, sistema autônomo sistema autônomo cenários listado na seção causa.As ações a seguir são recomendadas para eliminar a causa da falha de vinculação:

  • Determinar a causa, usando os dados fornecidos pelo bindingFailure MDA:

    • Executar o Assembly Binding Log Viewer (Fuslogvw.exe) para ler os logs de erros produzidos pelo fichário de assembly.

    • Determine se o assembly no local solicitado.No caso do LoadFrom e LoadFile métodos, o local solicitado podem ser com com facilidade determinados. No caso do Load método, que vincula usando a identidade do assembly, você deve procurar para assemblies que correspondam a essa identidade no domínio do aplicativo BaseDirectory caminho de teste de propriedade e o cache de assembly global.

  • Resolva a causa com base na determinação anterior.Opções de resolução de possíveis são:

    • Instalar o assembly solicitado no cache global de assemblies e telefonar de.Load método para carregar o assembly por identidade.

    • Copiar o assembly solicitado para o diretório de aplicativo e telefonar o Load método para carregar o assembly por identidade.

    • Reconfigure o domínio do aplicativo no qual ocorreu a falha de vinculação incluir o caminho de assembly alterando o BaseDirectory propriedade ou adicionar caminhos de probing particulares.

    • Altere a lista de controle de acesso do arquivo permitir que o usuário fez logon ler o arquivo.

Efeito sobre o tempo de execução

Este MDA não tem efeito sobre o CLR.Ele só reporta dados sobre falhas de ligação.

Saída

O MDA relata o assembly falha ao carregar, incluindo o caminho solicitado e/ou exibir o nome, o contexto de ligação, o domínio do aplicativo em que a carga foi solicitada e o motivo da falha.

O nome para exibição ou o caminho solicitado pode estar em branco se esses dados não estavam disponível para o CLR.Se a telefonar falhou o Load método, é provável que o tempo de execução não pôde determinar o nome para exibição para o assembly.

Configuração

<mdaConfig>
  <assistants>
    <bindingFailure />
  </assistants>
</mdaConfig>

Exemplo

O exemplo de código a seguir demonstra uma situação que pode ativar este MDA:

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            // This call attempts to load a nonexistent assembly.
            // The call will throw a System.IO.FileNotFound exception
            // and cause the activation of the bindingFailure MDA 
            // if it is registered.
            Assembly.Load("NonExistentAssembly");
        }
    }
}

Consulte também

Conceitos

Diagnosticar erros com assistentes de depuração gerenciadas