Когда DLL не найдена во время P / Invoking, как я могу получить сообщение о конкретной неуправляемой DLL, которая отсутствует? - PullRequest
4 голосов
/ 06 ноября 2008

Когда вы ссылаетесь на неуправляемую библиотеку (например, «A.dll»), которая, в свою очередь, ссылается на другую библиотеку («B.dll»), а B.dll отсутствует, вы получите сообщение об ошибке во время выполнения не удается загрузить 'B.dll'.

Но когда вы запускаете P / Invoke в 'A.dll' из управляемого кода, вы получите общее исключение из этой формы:

Необработанное исключение: System.DllNotFoundException: невозможно загрузить DLL 'A.dll': указанный модуль не найден.

Как я могу получить сообщение об ошибке, которое указывает конкретный неуправляемый dll-файл, который не удалось загрузить, когда p / вызывается из управляемого кода?

Ответы [ 4 ]

4 голосов
/ 06 ноября 2008

Я не думаю, что есть какой-то конкретный API, который вы можете использовать, чтобы определить, почему LoadLibrary (базовый Win32 API) не удалось для A.dll. Я рекомендую использовать инструмент типа Dependency Walker для устранения ошибок загрузки DLL.

0 голосов
/ 19 декабря 2013

Fusion Log Viewer - хороший инструмент для устранения проблем загрузки сборок в приложениях .NET.

Для выявления общих проблем с загрузкой файлов вы можете использовать Process Monitor.

0 голосов
/ 18 марта 2013

Вы не сможете получить ответ от исключения, но вы можете сделать это (с большой работой) через Process Monitor. В этой статье обсуждается, как и включает в себя инструмент для сканирования журналов Process Monitor, чтобы найти конкретную проблему.

http://tech.blinemedical.com/debug-could-not-load-file-or-assembly-or-one-of-its-dependencies/

0 голосов
/ 06 ноября 2008

Я не уверен, как вы можете получить это в виде исключения. Когда я сталкиваюсь с этой проблемой, я обычно пытаюсь открыть библиотеку DLL с помощью зависящего от.exe. Это довольно хорошо и сообщает об отсутствующих зависимостях, которые существуют, если DLL просто загружается из текущего местоположения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...