Подтвердить что ты не робот

Советы по отладке "Не удалось загрузить файл или сборку 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 находится в том же каталоге с ним.

Мне также не повезло, что он ударил любые точки останова отладчика при загрузке приложения.

4b9b3361

Ответ 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 > Разблокировать.