Советы по отладке "Не удалось загрузить файл или сборку X или одну из ее зависимостей" - PullRequest
23 голосов
/ 15 февраля 2010

Я ищу советы / предложения / идеи, которые помогут отладить проблему загрузки приложения; Не удалось загрузить файл или сборку ...

Решением / проектом, в котором я столкнулся с этой проблемой, является преобразование рабочей копии в Visual Studio 2008 в версию-кандидата Visual Studio 2010. Процесс преобразования оказался успешным, и все проекты решений настроены на Framework 4 .

Исключение составляет сторонний компонент (библиотека обработки графики), но любые ответы могут помочь другим с любой проблемной DLL.

Не удалось загрузить файл или сборку 'Aurigma.GraphicsMill.DLL' или одну из ее зависимостей. не является приложением Win32. (Исключение из HRESULT: 0x800700C1)

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

Полная трассировка стека исключений на PasteBin , но, кажется, не проливает свет на проблему ...

То, что я пробовал до сих пор безуспешно:

  1. Простая очистка, восстановление, перезапуск комбинаций Visual Studio 2010 RC.
  2. Удаление и повторное добавление рассматриваемой DLL.
  3. Переключение «copy local» в true и false в рассматриваемой DLL.
  4. Подтверждение того, что после «успешной сборки» соответствующая DLL-библиотека появляется в папке bin \ debug.
  5. Проверка на наличие ненужных ссылок на данную DLL (не найдена).
  6. Соответствующий файл лицензии для рассматриваемой DLL находится в том же каталоге, что и он.

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

Ответы [ 7 ]

34 голосов
/ 04 августа 2010

Я обнаружил, что причиной этой проблемы является то, что, поскольку вы переключились на .net v4, вы теперь используете новый пул приложений в IIS7 специально для asp.net v4 (сам пул называется ASP.NET v4 0,0' )

В разделе расширенных настроек пула приложений установите для параметра «Включить 32-разрядные приложения» значение true, и проблемная DLL-библиотека теперь будет загружаться, как ожидается.

Очевидно, вы должны сделать то же самое, если у вашего веб-приложения есть собственный пул приложений.

Если вы используете Windows Server 2008 (не R2), см. этот пост о том, как назначить правильные разрешения для удостоверения пула приложений

6 голосов
/ 23 июня 2010

Совет

Один из способов исследования, который мы взяли на себя, который решил часть наших проблем, но не общую проблему, был сочетанием x86 (32-разрядного) и x64 (64-разрядного)) сборок, ссылающихся друг на друга.

Убедитесь, что у вас нет 32-битных сборок, зависящих / ссылающихся на 64-битные сборки.

6 голосов
/ 15 февраля 2010

У меня было похожее исключение, когда мой исполняемый проект был установлен на Any CPU и имел ссылку на dll, скомпилированную с x86.

Попробуйте установить свой исполняемый файл на x86 и посмотреть, работает ли он. Если он не попытается fusion log , чтобы получить более подробную информацию об ошибке.

5 голосов
/ 08 ноября 2013

Это вызвано тем, что вы пытаетесь загрузить двоичную зависимость (один из файлов в папке Bin), которая является 32-битной, а ваше приложение работает в 64-битном режиме.

В .Net 4 и IIS 7 пулы приложений по умолчанию работают в 64-битном режиме.

Большинство двоичных файлов .Net компилируется с Any CPU, установленным в свойствах его сборки. Это означает, что они работают в 32- и 64-битном режиме.

Большинство приложений на C ++ и C, написанных на .Net do , требуют специальной компиляции для 32-битной или 64-битной версии. Это означает, что если вы используете неправильную версию развернутой бина вашей зависимости, она не сможет загрузиться.

Эту проблему можно решить, используя одно из следующих:

, если вы хотите сохранить 32-битную ссылку / зависимость:

  1. Специально настроить приложение IIS для работы в 32-битном режиме.
    • В управлении IIS;
    • Пул приложений -> Расширенные настройки (справа)
    • «Включено 32-битных приложений» установлено в True.
    • Перезапустите пул приложений
  2. Установите обе ваши сборки (32-битные и 64-битные) в GAC. IIS загрузит правильную версию в зависимости от операционной среды (в вашем случае это 64-битная версия).

Если вы просто хотите, чтобы это заработало:

  1. Замените ваш 32-битный двоичный файл в папке Bin на 64-битный. IIS не будет иметь проблем с загрузкой.
2 голосов
/ 01 июля 2013

Странно то, что я столкнулся с той же проблемой, и я добавил «false» в разрешающие 32-битные приложения в дополнительных настройках пула приложений, и тогда это сработало!

1 голос
/ 08 января 2013

Изменение раздела расширенных настроек пула приложений -> установите для параметра «Включить 32-разрядные приложения» значение true, чтобы решить мою проблему.

0 голосов
/ 12 ноября 2014

Проверьте, не заблокирована ли DLL. Щелкните правой кнопкой мыши на Dll> Свойства> Разблокировать.

...