Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Замечание
Эта статья относится к .NET Framework. Он не применяется к более новым реализациям .NET, включая .NET 6 и более поздние версии.
Помощник bindingFailure по управляемой отладке (MDA) активируется, когда сборка не загружается.
Симптомы
Код попытался загрузить сборку с помощью статической ссылки или одного из методов загрузчика, например Assembly.Load или Assembly.LoadFrom. Сборка не загружается, и FileNotFoundException создается исключение или FileLoadException исключение.
Причина
Сбой привязки возникает, когда среда выполнения не может загрузить сборку. Сбой привязки может быть результатом одной из следующих ситуаций:
Среда CLR не может найти запрошенную сборку. Существует множество причин, по которым это может произойти, например установка сборки или неправильно настроенное приложение для поиска сборки.
Распространенный сценарий проблемы — передача типа другому домену приложения, который требует, чтобы среда CLR загружала сборку, содержащую этот тип в другом домене приложения. Может быть невозможно загрузить сборку во время выполнения, если другой домен приложения настроен по-другому от исходного домена приложения. Например, два домена приложения могут иметь разные BaseDirectory значения свойств.
Запрошенная сборка повреждена или не является сборкой.
Код, пытающийся загрузить сборку, не имеет правильных разрешений на доступ к коду для загрузки сборок.
Учетные данные пользователя не предоставляют необходимые разрешения для чтения файла.
Резолюция
Первым шагом является определение того, почему среда CLR не может привязаться к запрошенной сборке. Существует множество причин, по которым среда выполнения могла не найти или загрузить запрошенную сборку, например сценарии, перечисленные в разделе "Причина". Для устранения причины сбоя привязки рекомендуется выполнить следующие действия.
Определите причину с помощью данных, предоставляемых
bindingFailureMDA:Запустите Fuslogvw.exe (средство просмотра журналов привязки сборок), чтобы прочитать журналы ошибок, созданные привязкой сборки.
Определите, находится ли сборка в запрашиваемом расположении. В случае с и LoadFile методами LoadFrom запрашиваемое расположение можно легко определить. В случае Load метода, который привязывается с помощью удостоверения сборки, необходимо искать сборки, соответствующие удостоверению, в пути пробы свойств домена BaseDirectory приложения и глобальном кэше сборок.
Устраните причину на основе предыдущего определения. Возможные варианты разрешения:
Установите запрошенную сборку в глобальном кэше сборок и вызовите ее. Load метод загрузки сборки по удостоверению.
Скопируйте запрошенную сборку в каталог приложения и вызовите Load метод для загрузки сборки по удостоверениям.
Перенастройка домена приложения, в котором произошел сбой привязки, чтобы включить путь сборки, изменив BaseDirectory свойство или добавив частные пути проверки.
Измените список управления доступом для файла, чтобы разрешить пользователю, вошедшего в систему, читать файл.
Влияние на среду выполнения
Этот MDA не влияет на среду CLR. Он сообщает только данные о сбоях привязки.
Выходные данные
MDA сообщает сборку, которая не удалось загрузить, включая запрошенный путь и (или) отображаемое имя, контекст привязки, домен приложения, в котором была запрошена загрузка, и причина сбоя.
Отображаемое имя или запрошенный путь может быть пустым, если эти данные недоступны для среды CLR. Если не удалось Load вызвать метод, скорее всего, среда выполнения не могла определить отображаемое имя сборки.
Конфигурация
<mdaConfig>
<assistants>
<bindingFailure />
</assistants>
</mdaConfig>
Пример
В следующем примере кода демонстрируется ситуация, которая может активировать этот 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");
}
}
}