Не удалось загрузить файл или сборку. Система не может найти указанный файл.

Я создаю dll, который ссылается на вторую dll. Я добавил вторую dll в качестве ссылки в первом проекте dll, перейдя в Properties > Common Properties > Framework and References > Add New Reference > Browse

Я скомпилировал вторую dll из исходного кода третьей стороны. Оба проекта - это С++/CLI. Всякий раз, когда мое основное приложение пытается вызвать функцию в первой dll, которая содержит вызов ко второй dll, я получаю следующую ошибку:

Необработанное исключение типа "System.IO.FileNotFoundException" произошел в Неизвестном модуле.

Дополнительная информация: Не удалось загрузить файл или сборку "NBIS, Version = 1.0.5156.29834, Culture = neutral, PublicKeyToken = null или один его зависимостей. Система не может найти указанный файл.

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

Вторая dll ссылается на несколько статических библиотек, но единственными ее ссылками на сборник являются

Система

System.Data​​p >

System.Drawing

System.XML

Все, что я добавил в качестве ссылок на сборку в первой dll.

Что я могу сделать, чтобы заставить мое приложение найти и загрузить вторую dll?

Ответ 1

Как указано в комментариях, SysInternals Process Monitor является ценным инструментом для диагностики проблем с разрешением DLL. Сообщает вам, когда у третьей стороны DLL есть зависимость, о которой вы не знаете, также сообщает вам, когда Windows ищет неправильный угол вашего жесткого диска для файла или находит неправильный.

Захваты загрузчика - это встроенный инструмент диагностики для Windows. Но Process Monitor намного удобнее.

Он генерирует довольно много информации, начиная со дна трассировки или включая трассировку только в нужное время. Вам часто нужно использовать свои инструменты фильтрации, чтобы превратить пожар в соответствующую струйку. Стоит час вашего времени, чтобы понять это, этот инструмент принадлежит любому черному поясу программиста.

Ответ 2

Щелкните правой кнопкой мыши проект, в котором вы создали DLL и новый проект ссылок, затем выберите свойства. В разделе "Приложение" проверьте целевую структуру и убедитесь, что обе они имеют одну и ту же структуру, некоторые проекты DLL имеют тенденцию выбирать по умолчанию версию структуры "клиентский профиль", которая, как правило, дает ошибку, которую вы сейчас имеете.

Сообщите мне, если это не проблема.

Ответ 3

My PowerShell ISE не работает как администратор. Казалось, это проблема для меня.

Ответ 4

Измените настройку пула приложений.
Выполните следующие шаги:

  • Диспетчер IIS open
  • Нажмите "Пулы приложений" (список пулов приложений)
  • Выберите пул приложений
  • Щелкните правой кнопкой мыши ваш пул приложений и выберите "Дополнительные настройки"
  • Измените "Включить 32-разрядное приложение" с false на true. (Когда вы создаете пул приложений Включить 32-разрядное приложение по умолчанию присваивает false)