Wie lege ich den Pfad zu einer DLL-Datei in Visual Studio fest?

130

Ich habe eine Anwendung entwickelt, die von einer DLL-Datei abhängt. Wenn ich meine Anwendung debugge , beschwert sich die Anwendung über Folgendes:

"Diese Anwendung konnte nicht gestartet werden, da xxx.dll nicht gefunden wurde."

Ich muss also die DLL-Datei in dasselbe Verzeichnis wie meine .vcproj-Datei kopieren.

Gibt es eine Möglichkeit, das Projekt so einzustellen, dass die DLL-Datei in (vorzugsweise) einem relativen Pfad oder (nicht bevorzugt) einem absoluten Pfad gesucht wird?

Ähnliches Konzept wie beim Festlegen des Include- und Bibliothekspfads in den Projekteinstellungen.

Ich meine, wenn ich meine Anwendung debugge (treffe F5), würde der obige Fehler auftauchen.

Sivabudh
quelle

Antworten:

196
  1. Gehen Sie zu den Projekteigenschaften (Alt + F7).
  2. Schauen Sie unter Debugging nach rechts
  3. Es gibt ein Umgebungsfeld.
  4. Fügen Sie dort Ihren relativen Pfad hinzu (relativ zum Ordner vcproj), dh .. \ some-framework \ lib, indem PATH=%PATH%;$(ProjectDir)\some-framework\libSie den Pfad anhängen oder voranstellenPATH=C:\some-framework\lib;%PATH%
  5. Drücken Sie erneut F5 (Debug) und es sollte funktionieren.
Sivabudh
quelle
15
Das Feld Umgebung enthält NAME = VALUE-Semikolon-getrennte Paare. An die PATH-Variable anhängen, damit der VS-Debugger zusätzliche Speicherorte nach DLLs durchsucht: PATH =% PATH%; $ (ProjectDir) lib
Brent Faust
1
Gibt es eine ähnliche Möglichkeit für den Release-Build?
Narek
Ich musste den DLL-Pfad zur Variablen $ (LibraryPath) hinzufügen (oder ihn in die Liste unter Bibliotheksverzeichnisse in der Einstellung Config Properties-> VC ++ Directories aufnehmen).
Foster Boondoggle
1
@ SlippD.Thompson Ja, du hast recht. Sie können jedoch dasselbe mit Alt + p, p erreichen.
Jenix
1
@ SlippD.Thompson Ah, als ich Ihren Kommentar noch einmal las, habe ich wohl falsch verstanden, was Sie meinten. Ja, ich stimme zu. Zumindest gibt es einige Hotkeys, die in Visual Studio nie geändert wurden, und 'Alt + p, p' ist einer davon. Es war dort zusammen mit 'Alt + F7', was jetzt etwas anderes bedeutet, wie Sie wissen. Außerdem bedeutet 'Alt + p, p' nur 'Projektmenü> * Eigenschaften'.
Jenix
7

Der Suchpfad , dass die Lader verwendet , wenn Sie Loadlibrary () aufrufen , können mithilfe der geändert werden SetDllDirectory () Funktion. Sie können dies also einfach aufrufen und den Pfad zu Ihrer Abhängigkeit hinzufügen, bevor Sie ihn laden.

Siehe auch DLL-Suchreihenfolge .

i_am_jorf
quelle
7

Gehen Sie die Projekteigenschaften -> Referenzpfade durch

Fügen Sie dann einen Ordner mit DLLs hinzu

kravits88
quelle
4
Bitte posten Sie keine identischen Antworten auf mehrere Fragen. Schreiben Sie eine gute Antwort und stimmen Sie ab, um die anderen Fragen als Duplikate zu schließen. Wenn die Frage kein Duplikat ist, passen Sie Ihre Antworten auf die Frage an.
Durron597
1
bei weitem die beste Antwort :)
Rathma
2
Dies scheint in Visual Studio 2015 in einem C ++ - Projekt nicht verfügbar zu sein. Welche Kombination aus Visual Studio-Version und Projekttyp unterstützt diese Option?
Filip Bártek
Die Frage von OP betraf C ++, aber diese Antwort bezieht sich auf C #.
Jenix
4

Eine andere Möglichkeit wäre, Working Directoryunter den Debugging-Optionen das Verzeichnis festzulegen, das diese DLL enthält.

Bearbeiten: Ich wollte die Verwendung einer Batch-Datei zum Starten von Visual Studio erwähnen (und die PATH-Variable in der Batch-Datei festlegen). Also habe ich ein bisschen gesucht und festgestellt, dass genau diese Frage vor nicht allzu langer Zeit in diesem Beitrag gestellt wurde . Die Antwort schlägt die Batch-Datei-Option sowie Projekteinstellungen vor, die anscheinend die Arbeit erledigen können (ich habe sie nicht getestet).

Mark Wilkins
quelle
Was ist, wenn ich von 2 DLLs abhängig bin, von denen jede in einem eigenen Verzeichnis lebt? (Ich habe meine Frage oben vereinfacht)
Sivabudh
Ich denke nicht, dass es möglich wäre, diese Lösung für mehr als ein einziges Verzeichnis zum Laufen zu bringen.
Mark Wilkins
3

In Ihren Projekteigenschaften (Rechtsklick auf Projekt, klicken Sie auf die Schaltfläche Eigenschaft) ▶ Konfigurationseigenschaften ▶ Build-Ereignisse ▶ Ereignisse nach dem Build ▶ Befehlszeile.

Bearbeiten Sie eine Befehlszeile und fügen Sie sie hinzu. Kopieren Sie beispielsweise botan.dll vom Quellpfad an den Ort, an dem das Programm ausgeführt wird.

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

Projekteigenschaften

Joma
quelle
Ich habe keine Ahnung, ob es richtig ist, dies zu tun, aber die IDE bietet mir diese Option und es war nützlich. Ich denke, es ist eine gute Option, wenn ich alle erforderlichen Dateien in einen anderen Ordner kopieren möchte, um Ihr Programm zu verteilen. Einfacher Zauber, aber effektiv. Hier in dieser Frage gibt es verschiedene Antworten, um das gleiche Ziel zu erreichen. Aber ich benutze diese Option und vermeide viele Kopfschmerzen.
Joma
Die anderen Optionen haben bei mir nicht funktioniert, nur diese, aber es scheint, dass die anderen der richtige Weg sein sollten.
rjferguson
-1

Ich weiß, dass diese Frage vor Jahren beantwortet wurde, aber für diejenigen wie mich, die ändern mussten, wo der Debugger die Anwendung startet, ändern Sie die Befehlseigenschaft unter Projekteigenschaften -> Debuggen.

TheOriginalCole
quelle