Предупреждение «регистрация привязки сборок выключена» появляется в логах ошибок .NET Framework в момент, когда приложение не может загрузить нужную сборку, а подробная диагностика привязки (Fusion Log) в системе отключена. Типичный фрагмент выглядит так: WRN: Assembly binding logging is turned OFF, после чего следует указание, что журнал можно включить через значение реестра ForceLog. Само по себе это не ошибка, а подсказка загрузчика сборок: он не смог записать детали неудачной привязки, потому что соответствующий механизм протоколирования деактивирован.
Для разработчика или администратора это предупреждение — сигнал, что реальную причину сбоя (например, FileNotFoundException или FileLoadException) придётся искать вслепую, пока логирование не включено. Ниже разберём, откуда берётся это сообщение, как безопасно включить журнал привязки сборок и как интерпретировать полученные данные.
Что означает это предупреждение
Инфраструктура .NET Framework использует механизм, известный как Fusion, для поиска и загрузки сборок. Когда приложение запрашивает сборку по имени, версии, культуре и открытому ключу, Fusion выполняет привязку: проверяет GAC, каталог приложения, пути probing, политики перенаправления версий. Если привязка завершается неудачей, в исключение добавляется строка о том, что регистрация привязки выключена.
Ключевой момент: сообщение Assembly binding logging is turned OFF не является причиной сбоя. Причина — отсутствующая, повреждённая или несовместимая по версии сборка. Предупреждение лишь сообщает, что подробный отчёт о том, где именно загрузчик искал файл и почему отклонил найденные варианты, не был записан.
Предупреждение о выключенной регистрации привязки — это не сама ошибка, а указание включить Fusion Log, чтобы увидеть настоящую причину сбоя загрузки сборки.
Типичные сценарии появления
Чаще всего проблема всплывает в таких ситуациях:
- 🔧 Приложение выдаёт Could not load file or assembly с указанием конкретной сборки и её версии.
- 📦 После обновления программы или установки нового пакета старая зависимость перестала находиться.
- 🌐 Веб-приложение на IIS падает при старте, а в журнале событий видна та же строка про выключенную регистрацию.
- 🧩 Плагин или сторонняя библиотека требует версию сборки, отличную от установленной, и перенаправление версий не настроено.
Во всех этих случаях первый шаг одинаков: включить журнал привязки, повторить ошибку и прочитать, где загрузчик искал сборку. Без этого диагностика превращается в перебор догадок.
Как включить регистрацию привязки сборок через реестр
Основной способ — установить параметры в разделе реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion. Изменения применяются к процессам, запущенным после правки; уже работающие приложения нужно перезапустить. Для внесения изменений потребуются права администратора.
| Параметр (DWORD) | Значение | Назначение |
|---|---|---|
ForceLog | 1 | Логировать все привязки, включая неудачные |
LogFailures | 1 | Логировать только неудачные привязки |
LogResourceBinds | 1 | Логировать привязки сателлитных сборок ресурсов |
LogPath | строка, например C:\FusionLog\ | Каталог для записи логов в файлы |
Пример команды для включения логирования всех ошибок привязки через командную строку с правами администратора:
reg add "HKLM\SOFTWARE\Microsoft\Fusion" /v ForceLog /t REG_DWORD /d 1 /f
reg add "HKLM\SOFTWARE\Microsoft\Fusion" /v LogPath /t REG_SZ /d "C:\FusionLog\" /f
⚠️ Внимание: каталог, указанный в LogPath, нужно создать заранее — если папки не существует, логи могут не записываться. Также учтите, что включённое логирование замедляет загрузку сборок, поэтому после диагностики параметры стоит удалить или обнулить.
☑️ Включение журнала привязки сборок
Включение через Fuslogvw.exe
Альтернатива ручной правке реестра — утилита Assembly Binding Log Viewer, известная как Fuslogvw.exe. Она входит в состав Windows SDK и средств разработчика Visual Studio. Запустить её нужно от имени администратора, иначе настройки не сохранятся.
В окне утилиты через кнопку Settings выбирается режим: логировать только ошибки привязки или все привязки без исключения. После этого воспроизводите сбой и обновляйте список — каждая запись открывается как HTML-отчёт с полной цепочкой поиска сборки. Если записей нет, проверьте, что утилита запущена с повышенными правами и что приложение было перезапущено.
Как читать журнал привязки
Запись Fusion Log показывает последовательность шагов загрузчика: откуда поступил запрос (вызывающая сборка), какие пути проверялись, какие политики издателя и перенаправления версий применялись, и на каком этапе произошёл отказ. Ищите строки LOG: с попытками загрузки и финальное ERR: с описанием результата.
Типичная картина: загрузчик ищет сборку версии, скажем, 2.0.0.0, а в каталоге приложения лежит 3.1.0.0. Тогда решение — либо положить нужную версию рядом с исполняемым файлом, либо добавить binding redirect в конфигурационный файл приложения (app.config или web.config):
<dependentAssembly>
<assemblyIdentity name="Example.Library" publicKeyToken="32ab4ba45e0a69a1" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0"/>
</dependentAssembly>
Значение publicKeyToken и точные номера версий нужно брать из реальной сборки и из текста ошибки — подставлять «примерные» значения бессмысленно, перенаправление просто не сработает.
Имя сборки, версию и publicKeyToken удобно смотреть в тексте исходного исключения или через команду "sn -T имя_сборки.dll" из инструментов разработчика.
Когда логирование стоит отключить
Постоянно включённый ForceLog на рабочей машине или сервере — плохая идея. Каждая загрузка сборки сопровождается записью на диск, что заметно замедляет холодный старт приложений и засоряет диск HTML-файлами. На сервере с IIS объём логов может расти особенно быстро.
После завершения диагностики удалите добавленные значения реестра или установите их в ноль:
reg delete "HKLM\SOFTWARE\Microsoft\Fusion" /v ForceLog /f
reg delete "HKLM\SOFTWARE\Microsoft\Fusion" /v LogPath /f
⚠️ Внимание: перед правкой реестра создайте точку восстановления или экспортируйте изменяемый раздел. Ошибочные изменения в других ветках реестра способны нарушить работу системы.
Почему лог пустой, хотя ForceLog включён
Наиболее частые причины — приложение не перезапущено после правки реестра, папка LogPath не существует, либо сбой происходит в 64-разрядном процессе, а настройки проверялись в контексте другой разрядности. Также убедитесь, что смотрите логи того же пользователя, под которым работает приложение — пулы приложений IIS часто работают под отдельными учётными записями.
Что делать, если причина так и не найдена
Если журнал показывает, что сборка находится и загружается, но приложение всё равно падает, проблема может быть глубже: несовпадение разрядности процесса (x86 против x64), повреждённый GAC, конфликт зависимостей внутри самой библиотеки. Здесь полезны дополнительные инструменты — просмотр зависимостей сборки, проверка целевой платформы проекта, анализ журнала событий Windows.
В сложных случаях имеет смысл свериться с документацией конкретного приложения или библиотеки: у поставщика могут быть заявленные требования к версиям .NET Framework и известные конфликты зависимостей. Это надёжнее, чем подбор перенаправлений версий методом проб.
Порядок действий всегда один: включить Fusion Log → воспроизвести ошибку → прочитать цепочку поиска сборки → устранить несовпадение версий → отключить логирование.
Частые вопросы
Опасно ли включать регистрацию привязки сборок?
Само по себе логирование безопасно — оно лишь записывает отчёты о загрузке сборок. Риск связан только с правкой реестра, поэтому изменения вносите аккуратно и с правами администратора, а после диагностики отключайте.
Работает ли этот метод в .NET Core и .NET 5+?
Механизм Fusion Log относится к классическому .NET Framework. В современных версиях .NET диагностика загрузки сборок выполняется иначе — через события трассировки и переменные окружения, поэтому описанные ключи реестра там не применяются.
Почему ошибка осталась после включения логирования?
Логирование не исправляет ошибку — оно только показывает её причину. Устранить сбой нужно отдельно: добавить недостающую сборку, настроить перенаправление версий или установить требуемый пакет.
Где искать Fuslogvw.exe, если SDK не установлен?
Утилита распространяется в составе Windows SDK и Visual Studio. Если устанавливать их не хочется, достаточно ручной правки реестра — логи будут записываться в папку, указанную в LogPath, и откроются в браузере.
Нужно ли перезагружать компьютер после правки реестра?
Перезагрузка системы не требуется. Достаточно перезапустить само приложение или пул приложений IIS, чтобы загрузчик сборок считал новые параметры.