Не удалось загрузить файл или сборку. Система не может найти указанный файл.
Я создаю 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.Datap >
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)