Как включить протоколирование привязки ассемблера?
Я получаю: "Не удалось загрузить файл или сборку 'Bla' или одну из ее зависимостей. Была предпринята попытка загрузить программу с неправильным форматом."
Часть подробной информации гласит:
"WRN: Журналирование сборочных привязок выключено. Чтобы включить протоколирование сбоев привязки сборки, установите значение реестра [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) равным 1. Примечание: Журналирование сбоев привязки сборки приводит к некоторому снижению производительности. Чтобы отключить эту функцию, удалите значение реестра [HKLM\Software\Microsoft\Fusion!EnableLog].".
Итак, думая, что это может дать мне некоторое понимание того, почему я получаю вышеуказанную ошибку (возможно, следующий YSOD будет содержать более явную информацию о том, почему именно происходит сбой), я перешел к этому месту в реестре, но там нет такого ключа, который я могу видеть. А вот что там есть, так это:
\Fusion
(Default) value not set
\GACChangeNotification
\NativeImagesIndex
\PublisherPolicy
Что я упускаю?
Хорошее место для начала расследования неудачного связывания - использование утилиты "fuslogvw.exe". Это может дать вам необходимую информацию о сбое привязки, так что вам не придется возиться со значениями реестра, чтобы включить регистрацию привязки.
Страница Fuslogvw MSDN
Утилита должна находиться в папке Microsoft SDKs, которая в зависимости от вашей операционной системы будет выглядеть следующим образом: "C:\Program Files (x86)\Microsoft SDKs\Windows\v{версия SDK}A\Bin\FUSLOGVW.exe".
Запустите эту утилиту (она имеет графический интерфейс) и установите настройки на "Запись ошибок привязки на диск".
Нажмите "Удалить все", чтобы очистить список от всех предыдущих сбоев привязки.
Воспроизведите сбой привязки в своем приложении
В утилите нажмите кнопку Refresh. Вы должны увидеть в списке зарегистрированный сбой привязки.
Вы можете просмотреть информацию о сбое привязки, выбрав его в списке и нажав "Просмотр журнала"
Первое, на что я обращаю внимание, это путь, по которому приложение ищет сборку. Вы также должны убедиться, что номер версии рассматриваемой сборки соответствует ожидаемому.
Просто создайте новый DWORD (32) под ключом Fusion. Назовите DWORD в EnableLog и установите для него значение 1. Затем перезапустите IIS, обновите страницу, указав ошибки, и журналы связывания сборки будут отображаться в сообщении об ошибке.
Создайте новый пул приложений
Перейдите в Дополнительные настройки этого пула приложений
Установите для параметра «Включить 32-разрядное приложение» значение «Истина»
Направьте свое веб-приложение, чтобы использовать этот новый пул
Снимок экрана (IIS-ApplicationPool)!
Ответ Пер Пирс. Джейсона выше, мне повезло с:
Просто создайте новый DWORD (32) под ключом Fusion. Назовите DWORD в LogFailures и установите для него значение 1. Затем перезапустите IIS, обновите страницу, указав ошибки, и журналы связывания сборки будут отображаться в сообщении об ошибке.
Для меня файлом «Bla» был System.Net.http dll, который отсутствовал в моей папке BIN. Я просто добавил это, и это работало нормально. Не изменил ни одного ключа реестра или чего-либо подобного.
Если вы иногда запускаете разные версии вашего приложения, убедитесь, что вы удалили 'Bla' из каталога bin приложения, если запущенная версия не нуждается в нем.
Вместо создания нового пула приложений, вы можете перейти к своему Существующий пул приложения - > Щелкните правой кнопкой мыши «Предварительная настройка» - > Включить 32-битное приложение ----- Установите значение TRUE
Когда у меня была такая же проблема, я решил ее, удалив существующий
key.snk
в этом проекте и добавив новый ключ.Эта ошибка приходит ко мне в приложении Windows при вызове сервера dll из клиента. После перезапуска системы все работает нормально