Partilhar via


bindingFailure MDA

Nota

Este artigo é específico do .NET Framework. Ele não se aplica a implementações mais recentes do .NET, incluindo o .NET 6 e versões posteriores.

O bindingFailure assistente de depuração gerenciado (MDA) é ativado quando um assembly não é carregado.

Sintomas

O código tentou carregar um conjunto usando uma referência estática ou um dos métodos do carregador, como Assembly.Load ou Assembly.LoadFrom. O assembly não é carregado e uma ou FileLoadException exceção FileNotFoundException é lançada.

Motivo

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

  • O Common Language Runtime (CLR) não pode encontrar o assembly solicitado. Há muitas razões pelas quais isso pode ocorrer, como o assembly não estar instalado ou o aplicativo não estar configurado corretamente para localizar o assembly.

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

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

  • O código que tenta carregar o assembly não tem as permissões de segurança de acesso ao código corretas 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 pôde se vincular ao assembly solicitado. Há muitas razões pelas quais o tempo de execução pode não ter encontrado ou sido capaz de carregar o assembly solicitado, como os cenários listados na seção Causa. As seguintes ações são recomendadas para eliminar a causa da falha de ligação:

  • Determine a causa usando os dados fornecidos pelo bindingFailure MDA:

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

    • Determine se o assembly está no local solicitado. No caso dos LoadFrom e LoadFile métodos, a localização solicitada pode ser facilmente determinada. No caso do Load método, que se liga usando a identidade assembly, você deve procurar assemblies que correspondam a essa identidade no caminho de investigação de propriedade do BaseDirectory domínio do aplicativo e no cache de assembly global.

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

    • Instale o assembly solicitado no cache de assembly global e chame o. Load método para carregar o assembly por identidade.

    • Copie o assembly solicitado para o diretório do aplicativo e chame o Load método para carregar o assembly por identidade.

    • Reconfigure o domínio do aplicativo no qual ocorreu a falha de associação para incluir o caminho do assembly alterando a BaseDirectory propriedade ou adicionando caminhos de sondagem privados.

    • Altere a lista de controle de acesso do arquivo para permitir que o usuário conectado leia o arquivo.

Efeito no tempo de execução

Este MDA não tem efeito sobre o CLR. Ele apenas relata dados sobre falhas de vinculação.

Saída

O MDA relata o assembly que falhou ao carregar, incluindo o caminho solicitado e/ou nome de exibição, o contexto de ligação, o domínio do aplicativo no qual 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 estiverem disponíveis para o CLR. Se a chamada que falhou foi para o Load método, é provável que o tempo de execução não pôde determinar o nome de 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 esse 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