FileNotFoundException - Динамическое обнаружение - PullRequest
1 голос
/ 03 января 2012

Достаточно простой вопрос, я надеюсь, но мне еще не удалось найти ответ в Google, который работает ...

Я работаю в контексте тестирования C # и ссылаюсь на управляемую C ++ DLL, которая затем ссылается на обычные сборки C ++. Когда я пытаюсь запустить свой тест, я получаю исключение FileNotFoundException, которое не дает мне никаких сведений о файле, который он не смог найти.

System.IO.FileNotFoundException: указанный модуль не может быть найденный. (Исключение из HRESULT: 0x8007007E)

Я провел некоторые проверки с помощью ProcMon и обнаружил, что он пытается загрузить одну из библиотек DLL C ++, но проверяет все стандартные места (C: \ Windows, C: \ Windows \ System и т. Д.). Есть ли способ, которым я могу перенаправить это, чтобы включить дополнительную папку, в которую встроены все наши двоичные файлы?

Я предполагаю, что в AppDomain что-то есть, но я не совсем выяснил, какое свойство использовать, которое будет работать.

Ответы [ 2 ]

1 голос
/ 06 января 2012

Согласно предложениям Ганса:

[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetDllDirectory(string lpPathName);

SetDllDirectory(@"C:\SomeDir");
1 голос
/ 03 января 2012

Просто добавьте этот путь к переменной окружения Path.

В Windows 7: Нажмите клавишу Windows, введите «environment», выберите Edit the system environment variables, выберите Environment variables... добавить путь ...

Программно: См. этот пост .

Но я думаю, что более распространенный подход заключается в копировании ссылочной ссылкиDLL в ваш выходной каталог.Даже если для этого требуется больше места на диске, это гарантирует, что указанные библиотеки DLL всегда будут совместимы с вашим приложением C #.Если библиотеки DLL изменяются при обновлении CVS, и вы не перестраиваете свое приложение C #, оно, вероятно, не запустится должным образом.

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