bindingFailure MDA
O 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, como Assembly.Load ou Assembly.LoadFrom. O assembly não é carregado e um FileNotFoundException ou FileLoadException exceção é lançada.
Causa
Uma falha de ligação ocorre quando o tempo de execução é não é possível carregar um assembly. Uma falha de ligação pode ser o resultado de uma das seguintes situações:
O common language runtime (CLR) não é possível localizar o assembly solicitado. Há muitas razões para que isso ocorrer, como, por exemplo, o assembly não sendo instalado ou o aplicativo que não seja configurado corretamente para localizar o assembly.
Um cenário de problema comum está passando um tipo para outro domínio de aplicativo que requer o CLR carregar o assembly que contém esse tipo de domínio do aplicativo. Talvez não seja possível para o runtime carregar o assembly, se o domínio do aplicativo é configurado de forma diferente do domínio de 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 de código correto para carregar assemblies.
As credenciais do usuário não fornecerem as permissões necessárias para ler o arquivo.
Resolução
A primeira etapa é determinar por que o CLR não pôde ligar para o assembly solicitado. Há várias razões por que o runtime pode não ter encontrado ou foi capaz de carregar o assembly solicitado, como, por exemplo, os cenários listado na seção causa. As ações a seguir são recomendadas para eliminar a causa da falha de ligação:
Determinar a causa, usando os dados fornecidos pelo bindingFailure MDA:
Execute o Fuslogvw.exe (Assembly Binding Log Viewer) 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 facilmente determinados. No caso do Load método, que vincula usando a identidade do assembly, você deve procurar os assemblies que correspondam a essa identidade no domínio do aplicativo BaseDirectory caminho de teste de propriedade e o cache global de assemblies.
Resolva a causa baseada a determinação anterior. Opções de resolução de possíveis são:
Instale o assembly solicitado no cache global de assemblies e chamada a. Loadmétodo para carregar o assembly por identidade.
Copie o assembly solicitado o diretório de aplicativo e a chamada a Load método para carregar o assembly por identidade.
Reconfigure o domínio de aplicativo no qual ocorreu a falha de ligação incluir o caminho de assembly alterando tanto a BaseDirectory propriedade ou adicionando caminhos probing particular.
Altere a lista de controle de acesso para o arquivo permitir que o usuário conectado ler o arquivo.
Efeito sobre o tempo de execução.
Este MDA não tem efeito sobre o CLR. Ela somente reporta dados sobre falhas de ligação.
Saída
O MDA relata o assembly que falhou ao carregar, incluindo o caminho solicitado e/ou exibir o nome, o contexto de ligação, o domínio de aplicativo no qual a carga foi solicitada e o motivo da falha.
O nome de exibição ou o caminho solicitado pode ser em branco se esses dados não estavam disponíveis para o CLR. Se a chamada que falhou era a Load método, é provável que o runtime 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 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");
}
}
}