Как включить протоколирование привязки ассемблера?

Я получаю: "Не удалось загрузить файл или сборку 'Bla' или одну из ее зависимостей. Была предпринята попытка загрузить программу с неправильным форматом."

Часть подробной информации гласит:

"WRN: Журналирование сборочных привязок выключено. Чтобы включить протоколирование сбоев привязки сборки, установите значение реестра [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) равным 1. Примечание: Журналирование сбоев привязки сборки приводит к некоторому снижению производительности. Чтобы отключить эту функцию, удалите значение реестра [HKLM\Software\Microsoft\Fusion!EnableLog].".

Итак, думая, что это может дать мне некоторое понимание того, почему я получаю вышеуказанную ошибку (возможно, следующий YSOD будет содержать более явную информацию о том, почему именно происходит сбой), я перешел к этому месту в реестре, но там нет такого ключа, который я могу видеть. А вот что там есть, так это:

\Fusion 
    (Default)   value not set
    \GACChangeNotification
    \NativeImagesIndex
    \PublisherPolicy

Что я упускаю?

Комментарии к вопросу (1)
Решение

Хорошее место для начала расследования неудачного связывания - использование утилиты "fuslogvw.exe". Это может дать вам необходимую информацию о сбое привязки, так что вам не придется возиться со значениями реестра, чтобы включить регистрацию привязки.

Страница Fuslogvw MSDN

Утилита должна находиться в папке Microsoft SDKs, которая в зависимости от вашей операционной системы будет выглядеть следующим образом: "C:\Program Files (x86)\Microsoft SDKs\Windows\v{версия SDK}A\Bin\FUSLOGVW.exe".

  1. Запустите эту утилиту (она имеет графический интерфейс) и установите настройки на "Запись ошибок привязки на диск".

  2. Нажмите "Удалить все", чтобы очистить список от всех предыдущих сбоев привязки.

  3. Воспроизведите сбой привязки в своем приложении

  4. В утилите нажмите кнопку Refresh. Вы должны увидеть в списке зарегистрированный сбой привязки.

  5. Вы можете просмотреть информацию о сбое привязки, выбрав его в списке и нажав "Просмотр журнала"

Первое, на что я обращаю внимание, это путь, по которому приложение ищет сборку. Вы также должны убедиться, что номер версии рассматриваемой сборки соответствует ожидаемому.

Комментарии (8)

Просто создайте новый DWORD (32) под ключом Fusion. Назовите DWORD в EnableLog и установите для него значение 1. Затем перезапустите IIS, обновите страницу, указав ошибки, и журналы связывания сборки будут отображаться в сообщении об ошибке.

Комментарии (2)
  1. Создайте новый пул приложений

  2. Перейдите в Дополнительные настройки этого пула приложений

  3. Установите для параметра «Включить 32-разрядное приложение» значение «Истина»

  4. Направьте свое веб-приложение, чтобы использовать этот новый пул

Снимок экрана (IIS-ApplicationPool)!

Комментарии (1)

Ответ Пер Пирс. Джейсона выше, мне повезло с:

Просто создайте новый DWORD (32) под ключом Fusion. Назовите DWORD в LogFailures и установите для него значение 1. Затем перезапустите IIS, обновите страницу, указав ошибки, и журналы связывания сборки будут отображаться в сообщении об ошибке.

Комментарии (0)

Для меня файлом «Bla» был System.Net.http dll, который отсутствовал в моей папке BIN. Я просто добавил это, и это работало нормально. Не изменил ни одного ключа реестра или чего-либо подобного.

Комментарии (0)

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

Комментарии (0)

Вместо создания нового пула приложений, вы можете перейти к своему Существующий пул приложения - > Щелкните правой кнопкой мыши «Предварительная настройка» - > Включить 32-битное приложение ----- Установите значение TRUE

Комментарии (0)

Когда у меня была такая же проблема, я решил ее, удалив существующий key.snk в этом проекте и добавив новый ключ.

Комментарии (0)

Эта ошибка приходит ко мне в приложении Windows при вызове сервера dll из клиента. После перезапуска системы все работает нормально

Комментарии (0)