Как установить путь к файлу DLL в Visual Studio?

130

Я разработал приложение, которое зависит от файла DLL. Когда я отлаживаю свое приложение, оно жаловалось, что:

«Это приложение не удалось запустить, потому что xxx.dll не найден».

Поэтому мне нужно скопировать файл DLL в тот же каталог, что и мой файл .vcproj.

Есть ли способ настроить проект на поиск файла DLL по (желательно) относительному пути или (не предпочтительно) по абсолютному пути?

Аналогично тому, как мы устанавливаем путь к включению и библиотеке в настройках проекта.

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

sivabudh
источник

Ответы:

196
  1. Перейти в свойства проекта (Alt + F7)
  2. В разделе "Отладка" посмотрите вправо.
  3. Есть поле Environment.
  4. Добавьте туда свой относительный путь (относительно папки vcproj), например .. \ some-framework \ lib, добавив PATH=%PATH%;$(ProjectDir)\some-framework\libили добавив путь к путиPATH=C:\some-framework\lib;%PATH%
  5. Снова нажмите F5 (отладка), и все должно работать.
sivabudh
источник
15
Поле Environment принимает пары NAME = VALUE, разделенные точками с запятой. Добавьте к переменной PATH, чтобы VS Debugger искал дополнительные места для библиотек DLL: PATH =% PATH%; $ (ProjectDir) lib
Брент Фауст
1
Есть ли аналогичный способ сделать и для сборки выпуска?
Нарек
Мне нужно было добавить путь dll к переменной $ (LibraryPath) (или включить ее в список в разделе «Каталоги библиотек» в параметре «Свойства конфигурации» -> «Каталоги VC ++»).
Foster Boondoggle
1
@ SlippD.Thompson Да, ты прав. Но вы можете добиться того же, используя вместо этого Alt + p, p.
Jenix
1
@ SlippD.Thompson А, читая ваш комментарий еще раз, я думаю, что неправильно понял, что вы имели в виду. Да, я согласен. Но, по крайней мере, есть некоторые горячие клавиши, которые никогда не менялись в Visual Studio, и «Alt + p, p» - одна из них. Он был там вместе с Alt + F7, что, как вы знаете, теперь означает что-то еще. Кроме того, «Alt + p, p» означает просто «Меню проекта> * Свойства».
Jenix
7

Путь поиска, который загрузчик использует при вызове LoadLibrary (), можно изменить с помощью функции SetDllDirectory () . Так что вы можете просто вызвать это и добавить путь к своей зависимости перед ее загрузкой.

См. Также Порядок поиска DLL .

i_am_jorf
источник
7

Просмотрите свойства проекта -> Пути ссылок

Затем добавьте папку с DLL

kravits88
источник
4
Пожалуйста, не публикуйте одинаковые ответы на несколько вопросов. Опубликуйте один хороший ответ, затем проголосуйте / отметьте, чтобы закрыть другие вопросы как дубликаты. Если вопрос не повторяется, адаптируйте свои ответы к вопросу.
durron597
1
на сегодняшний день лучший ответ :)
Rathma
2
Кажется, это недоступно в Visual Studio 2015 в проекте C ++. Какая комбинация версии Visual Studio и типа проекта поддерживает этот параметр?
Филип Бартек
Вопрос OP касался C ++, но этот ответ предназначен для C #.
Jenix
У меня не сработало с C # и VS2017
mherzog
4

Другой Working Directoryвариант - установить в параметрах отладки каталог, в котором находится эта DLL.

Изменить: я собирался упомянуть об использовании пакетного файла для запуска Visual Studio (и установить переменную PATH в пакетном файле). Итак, немного поискал и увидел, что не так давно в этом посте был задан точно такой же вопрос . Ответ предлагает вариант пакетного файла, а также настройки проекта, которые, по-видимому, могут выполнить эту работу (я не тестировал это).

Марк Уилкинс
источник
что, если я использую 2 библиотеки DLL, каждая из которых живет в своем собственном каталоге? (я упростил свой вопрос выше)
sivabudh
Я не думаю, что это решение можно было бы заставить работать более чем для одного каталога.
Марк Уилкинс,
3

В свойствах вашего проекта (щелкните правой кнопкой мыши проект, нажмите кнопку свойства) ▶ Свойства конфигурации ▶ События сборки ▶ События после сборки ▶ Командная строка.

Отредактируйте и добавьте одну инструкцию в командную строку. например скопируйте botan.dll из исходного пути в место, где выполняется программа.

copy /Y "$(SolutionDir)ProjectDirs\x64\Botan\lib\botan.dll" "$(TargetDir)"

Свойства проекта

Joma
источник
Я понятия не имею, правильно ли это делать, но среда IDE дает мне эту возможность, и она оказалась полезной. Я думаю, что это хороший вариант, если я хочу скопировать все необходимые файлы в другую папку для распространения вашей программы. Простое заклинание, но эффективное. Здесь, в этом вопросе, есть разные ответы для достижения одной и той же цели. Но я использую этот вариант и избегаю многих головных болей.
Joma
Другие варианты не сработали для меня, только этот, но похоже, что другие должны быть правильным путем.
rjferguson
-1

Я знаю, что на этот вопрос был дан ответ много лет назад, но для тех, кто, как я, нуждался в изменении места, где отладчик запускает приложение, измените свойство команды в разделе «Свойства проекта» -> «Отладка».

TheOriginalCole
источник