Советы по отладке "Не удалось загрузить файл или сборку X или одну из его зависимостей"
Я ищу советы/предложения/идеи, чтобы помочь отладить проблему загрузки приложения; Не удалось загрузить файл или сборку...
Решение/проект, в котором я столкнулся с этой проблемой, - это преобразование из рабочей копии в Visual Studio 2008 в Visual Studio 2010 Release Candidate. Процесс преобразования оказался успешным, и все проекты решений были установлены в Framework 4.
Исключением является сторонний компонент (библиотека обработки графики), но любые ответы могут помочь другим с любой неприятной DLL.
Не удалось загрузить файл или сборку "Aurigma.GraphicsMill.DLL" или одну из его зависимостей. не является приложением Win32. (Исключение из HRESULT: 0x800700C1)
Какое смущение в этом исключении является дополнительным текстом: не является допустимым приложением Win32.
Полная трассировка стека исключений находится на PasteBin, но, похоже, не проливает больше света на проблему...
То, что я пробовал до сих пор без успеха:
- Простые чистые, перестроенные, перезапущенные комбинации Visual Studio 2010 RC.
- Удаление и повторное добавление рассматриваемой DLL.
- Переключение "copy local" на true и false в соответствующей DLL.
- Подтверждение того, что после "успешной сборки" соответствующая DLL появляется в папке bin\debug.
- Проверка каких-либо ненужных ссылок на DLL, о которых идет речь (не найдено).
- Связанный файл лицензии для рассматриваемой DLL находится в том же каталоге с ним.
Мне также не повезло, что он ударил любые точки останова отладчика при загрузке приложения.
Ответы
Ответ 1
Я нашел причину этой проблемы в том, что, поскольку вы переключились на .net v4, теперь вы используете новый пул приложений в IIS7 специально для asp.net v4 (сам пул называется "ASP.NET v4 0,0' )
В расширенном разделе настроек пула приложений установите для параметра "Включить 32-разрядные приложения" значение "И", и ваша проблема будет загружена, как ожидалось, DLL.
Очевидно, что вы должны сделать то же самое, если ваше веб-приложение имеет свой собственный пул приложений.
Если вы используете Windows Server 2008 (а не R2), см. этот пост о том, как назначить правильные разрешения для вашего идентификатора пула приложений
Ответ 2
У меня было подобное исключение, когда мой исполняемый проект был установлен в Any CPU и имел ссылку на dll, скомпилированную с x86.
Попробуйте установить исполняемый файл на x86 и посмотрите, работает ли он. Если он не пытается журнал слияния, чтобы получить более подробную информацию об ошибке.
Ответ 3
Совет
Одним из направлений исследования, которые мы предприняли, которые решили часть наших проблем, но не общая проблема, было сочетание х86 (32-разрядных) и x64 (64-разрядных) сборок, ссылающихся друг на друга.
Убедитесь, что не имеют 32-битные сборки в зависимости от/64-битные сборки.
Ответ 4
Это вызвано тем, что вы пытаетесь загрузить двоичную зависимость (один из файлов в папке Bin
), 32-разрядный, и ваше приложение работает в режиме 64 бит.
В .Net 4 и IIS 7 пулы приложений по умолчанию работают в режиме 64 бит.
Большинство бинарных файлов .Net скомпилированы с Any CPU
, установленными в его свойствах сборки. Это означает, что они работают в режиме 32 и 64 бит.
Большинство приложений на С++ и C, написанных на .Net, требуют особого компиляции для 32-битного или 64-битного. Это означает, что, если вы используете неверную версию развернутой версии, которую вы не можете загрузить, она не может быть загружена.
Это можно решить, используя следующее:
, если вы хотите сохранить 32-разрядную ссылку/зависимость:
- В частности, установите приложение IIS для запуска в 32-битном режиме.
- В управлении IIS;
- Пул приложений → Дополнительные настройки (справа)
- "Включено 32-разрядные приложения" установлено значение "Истина".
- Перезапустите пул приложений
- Установите обе свои сборки (32 бит и 64 бит) в GAC. IIS загрузит правильную версию в зависимости от операционной среды (в вашем случае это будет 64-битный).
Если вы просто хотите заставить его работать:
- Замените 32-битный двоичный файл в вашей папке
Bin
на 64-битный. IIS не будет загружать его.
Ответ 5
Странно, я столкнулся с той же проблемой, и я поместил "false" в разрешенные 32-разрядные приложения в расширенных настройках пула приложений, а затем он сработает!
Ответ 6
Изменение раздела расширенных настроек пула приложений → установка "Включить 32-разрядные приложения" для истинного решения моей проблемы.
Ответ 7
Проверьте, была ли DLL заблокирована.
Щелкните правой кнопкой мыши на Dll > Свойствa > Разблокировать.