Jak ustawić ścieżkę do pliku DLL w programie Visual Studio?

133

Stworzyłem aplikację, która opiera się na pliku DLL. Kiedy debuguję moją aplikację, aplikacja będzie narzekać, że:

„Nie udało się uruchomić tej aplikacji, ponieważ nie znaleziono xxx.dll”.

Muszę więc skopiować plik DLL do tego samego katalogu, co mój plik .vcproj.

Czy istnieje sposób, aby projekt szukał pliku DLL w (najlepiej) jakiejś ścieżce względnej lub (nie preferowanej) w jakiejś ścieżce bezwzględnej?

Koncepcja podobna do tego, jak ustawiamy dołączanie i ścieżkę biblioteki w ustawieniach projektu.

Chodzi mi o to, że kiedy debuguję moją aplikację (trafiając F5), powyższy błąd wyskakuje.

sivabudh
źródło

Odpowiedzi:

202
  1. Przejdź do właściwości projektu (Alt + F7)
  2. W obszarze Debugowanie spójrz w prawo
  3. Jest pole Środowisko.
  4. Dodaj tam swoją ścieżkę względną (względną do folderu vcproj), tj. .. \ some-framework \ lib, dołączając PATH=%PATH%;$(ProjectDir)\some-framework\liblub poprzedzając ścieżkęPATH=C:\some-framework\lib;%PATH%
  5. Naciśnij ponownie F5 (debugowanie) i powinno działać.
sivabudh
źródło
15
Pole Środowisko przyjmuje pary rozdzielane średnikami NAZWA = WARTOŚĆ. Dołącz do zmiennej PATH, aby VS Debugger przeszukiwał dodatkowe lokalizacje dla bibliotek DLL: PATH =% PATH%; $ (ProjectDir) lib
Brent Faust
3
Czy istnieje podobny sposób wykonania kompilacji wydania?
Narek
1
Alt-F7 powoduje wyświetlenie tymczasowego okna dialogowego z listą Active Tool Windows i Active Files (społeczność programu Visual Studio 2017). Czy nie ma sposobu, aby uzyskać dostęp do właściwości projektu za pomocą staromodnego polecenia menu? Nie mogę tego znaleźć.
Slipp D. Thompson
1
@ SlippD.Thompson Tak, masz rację. Ale możesz osiągnąć to samo, używając zamiast tego Alt + p, p.
Jenix
1
@ SlippD.Thompson Ach, czytając ponownie twój komentarz, myślę, że źle zrozumiałem, co masz na myśli. Tak, zgadzam się. Ale przynajmniej istnieją pewne skróty klawiszowe, których nigdy nie zmieniano w programie Visual Studio, a jednym z nich jest „Alt + p, p”. Było tam razem z „Alt + F7”, co oznacza teraz coś innego, jak wiesz. Ponadto „Alt + p, p” oznacza po prostu „Menu projektu> * Właściwości”.
Jenix
7

Ścieżkę wyszukiwania używaną przez moduł ładujący podczas wywoływania funkcji LoadLibrary () można zmienić za pomocą funkcji SetDllDirectory () . Możesz więc po prostu to wywołać i dodać ścieżkę do swojej zależności, zanim ją załadujesz.

Zobacz także Kolejność wyszukiwania DLL .

i_am_jorf
źródło
6

Przejdź przez właściwości projektu -> Ścieżki odniesienia

Następnie dodaj folder z bibliotekami DLL

kravits88
źródło
4
Nie publikuj identycznych odpowiedzi na wiele pytań. Opublikuj jedną dobrą odpowiedź, a następnie zagłosuj / oflaguj, aby zamknąć pozostałe pytania jako duplikaty. Jeśli pytanie nie jest powtórzeniem, dostosuj swoje odpowiedzi do pytania.
durron597
1
zdecydowanie najlepsza odpowiedź :)
Rathma
2
Wydaje się, że nie jest to dostępne w programie Visual Studio 2015 w projekcie C ++. Która kombinacja wersji programu Visual Studio i typu projektu obsługuje tę opcję?
Filip Bártek
Pytanie OP dotyczyło C ++, ale ta odpowiedź dotyczy C #.
Jenix
4

Inną możliwością byłoby ustawienie w Working Directoryopcjach debugowania katalogu zawierającego tę bibliotekę DLL.

Edycja: zamierzałem wspomnieć o użyciu pliku wsadowego do uruchomienia programu Visual Studio (i ustawieniu zmiennej PATH w pliku wsadowym). Więc poszukałem trochę i zobaczyłem, że dokładnie to samo pytanie zostało zadane nie tak dawno temu w tym poście . Odpowiedź sugeruje opcję pliku wsadowego, a także ustawienia projektu, które najwyraźniej mogą załatwić sprawę (nie testowałem tego).

Mark Wilkins
źródło
co jeśli będę polegał na 2 bibliotekach dll, z których każda znajduje się we własnym katalogu? (Uprościłem moje pytanie powyżej)
sivabudh
Nie sądzę, aby można było sprawić, by to rozwiązanie działało w więcej niż jednym katalogu.
Mark Wilkins,
3

We właściwościach projektu (kliknij prawym przyciskiem myszy projekt, kliknij przycisk właściwości) ▶ Właściwości konfiguracji ▶ Budowanie zdarzeń ▶ Wydarzenia po kompilacji ▶ Wiersz poleceń.

Edytuj i dodaj jedną instrukcję do wiersza poleceń. na przykład skopiuj botan.dll ze ścieżki źródłowej do lokalizacji, w której program jest wykonywany.

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

Właściwości projektu

Joma
źródło
Nie mam pojęcia, czy jest to słuszne, ale IDE daje mi taką opcję i było to przydatne, myślę, że jest to dobra opcja, jeśli chcę skopiować wszystkie niezbędne pliki do innego folderu, aby rozpowszechnić twój program. Proste zaklęcie, ale skuteczne. Tutaj w tym pytaniu są różne odpowiedzi, które prowadzą do tego samego celu. Ale używam tej opcji i unikam wielu bólów głowy.
Joma
Inne opcje nie działały dla mnie, tylko ta, ale wygląda na to, że inne powinny być właściwą drogą.
rjferguson
-2

Wiem, że odpowiedź na to pytanie udzielono wiele lat temu, ale dla takich jak ja, którzy musieli zmienić miejsce, w którym debugger uruchamia aplikację, zmień właściwość polecenia w obszarze Właściwości projektu -> Debugowanie.

TheOriginalCole
źródło