Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Observação
Este artigo é específico para .NET Framework. Ele não se aplica a implementações mais recentes do .NET, incluindo o .NET 6 e versões posteriores.
O bindingFailure MDA (assistente de depuração gerenciado) é ativado quando um assembly falha ao carregar.
Symptoms
O código tentou carregar um assembly 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 é gerada.
Motivo
Uma falha de associação ocorre quando o runtime não consegue carregar um assembly. Uma falha de associação pode ser o resultado de uma das seguintes situações:
O CLR (Common Language Runtime) não pode localizar o assembly solicitado. Há muitos motivos para isso ocorrer, como o assembly que não está sendo instalado ou o aplicativo não está sendo configurado corretamente para localizar o assembly.
Um cenário de problema comum é passar um tipo para outro domínio de aplicativo, o que exige que o CLR carregue o assembly que contém esse tipo no outro domínio do aplicativo. Talvez não seja possível que o runtime carregue 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 de 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 ser associado ao assembly solicitado. Há muitos motivos pelos quais o runtime 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 associação:
Determine a causa usando os dados fornecidos pelo
bindingFailureMDA:Execute o Fuslogvw.exe (Visualizador de Log de Associação do Assembly) para ler os logs de erro produzidos pelo associador de assembly.
Determine se o assembly está no local solicitado. No caso dos métodos e LoadFile dos LoadFrom métodos, o local solicitado pode ser facilmente determinado. No caso do Load método, que é associado usando a identidade do assembly, você deve procurar assemblies que correspondam a essa identidade no caminho de investigação de propriedade do domínio do BaseDirectory 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 para carregar o assembly por identidade.
Copie o assembly solicitado no 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 investigação privados.
Altere a lista de controle de acesso do arquivo para permitir que o usuário conectado leia o arquivo.
Efeito no Runtime
Esse MDA não tem nenhum efeito sobre o CLR. Ele relata apenas dados sobre falhas de associação.
Saída
O MDA relata o assembly que não foi carregado, incluindo o caminho solicitado e/ou o nome de exibição, o contexto de associação, o domínio do aplicativo no qual a carga foi solicitada e o motivo da falha.
O nome de exibição ou o caminho solicitado podem 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 runtime não possa determinar o nome de exibição do 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");
}
}
}