Поделиться через


bindingFailure MDA

Примечание.

Эта статья относится к .NET Framework. Он не применяется к более новым реализациям .NET, включая .NET 6 и более поздние версии.

Помощник по отладке управляемого кода (MDA) bindingFailure запускается в случае сбоя при загрузке сборки.

Симптомы

Код попытался загрузить сборку с использованием статической ссылки или одного из методов загрузчика, такого как Assembly.Load или Assembly.LoadFrom. Сборка не загружается, в результате чего возникает исключение FileNotFoundException или FileLoadException.

Причина

Если среде выполнения не удается загрузить сборку, происходит сбой привязки. Сбой привязки может возникать в одной из следующих ситуаций:

  • Общеязыковой среде выполнения (CLR) не удается найти запрошенную сборку. Это может быть вызвано самыми разными причинами, например отсутствием установленной сборки или некорректной конфигурацией поиска сборок в приложении.

  • Типичный сценарий возникновения проблемы связан с передачей типа в другой домен приложения, которому требуется среда CLR для загрузки сборки, содержащей этот тип, в другом домене приложения. Если конфигурация другого домена приложения отличается от исходного, при загрузке сборки среда выполнения может столкнуться с ошибкой. Например, в этих двух доменах приложений могут быть установлены разные значения свойства BaseDirectory.

  • Запрошенная сборка повреждена или не является сборкой.

  • Код, который пытается загрузить сборку, не имеет разрешений на управление доступом для кода, необходимых для загрузки сборок.

  • Учетные данные пользователя не предоставляют разрешений, необходимых для чтения файла.

Разрешение

В первую очередь необходимо определить причины, по которым среде CLR не удается выполнить привязку к запрошенной сборке. Существует много различных причин, по которым среде выполнения не удается найти или загрузить запрошенную сборку. Некоторые из них перечислены в разделе "Причина". Чтобы устранить причину сбоя привязки, рекомендуется выполнить следующие действия:

  • Определите причину, используя данные, предоставленные помощником по отладке управляемого кода bindingFailure:

    • Запустите программу Fuslogvw.exe (средство просмотра журнала привязки сборок) для чтения журналов ошибок, создаваемых средством привязки сборок.

    • Определите, находится ли запрошенная сборка в указанном месте. В случае методов LoadFrom и LoadFile запрошенное расположение можно легко определить. При использовании метода Load, который осуществляет привязку по удостоверению сборки, необходимо определить сборки, соответствующие этому удостоверению, в пути пробы свойства BaseDirectory домена приложений и глобальном кэше сборок.

  • Устраните выявленные ранее причины. Возможны следующие варианты решения проблемы:

    • Установите запрошенную сборку в глобальный кэш сборок и вызовите метод Load для загрузки сборки по удостоверению.

    • Скопируйте запрошенную сборку в каталог приложения и вызовите метод Load для загрузки сборки по удостоверению.

    • Измените конфигурацию домена приложения, в котором произошел сбой привязки, включив в нее путь к сборке. Для этого измените значение свойства BaseDirectory или добавьте частные пути пробы.

    • Измените список управления доступом и разрешите чтение файла для выполнивших вход пользователей.

Влияние на среду выполнения

Этот помощник отладки управляемого кода не оказывает никакого влияния на среду CLR. Он только создает отчеты о сбоях привязки.

Выходные данные

Этот помощник по отладке управляемого кода создает отчет о сбое при загрузке сборок, в который включаются запрошенный путь и (или) отображаемое имя, контекст привязки, домен приложения, в котором была запрошена загрузка, а также причина сбоя.

Если среде CLR недоступны соответствующие данные, отображаемое имя и запрошенный путь могут быть пустыми. Если сбоем завершается вызов метода Load, чаще всего среде выполнения не удается определить отображаемое имя сборки.

Настройка

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

Пример

В следующем примере кода показана ситуация, которая может привести к запуску помощника по отладке управляемого кода:

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");
        }
    }
}

См. также