Comment définir le chemin d'accès à un fichier DLL dans Visual Studio?

130

J'ai développé une application qui dépend d'un fichier DLL. Lorsque je débogue mon application, l'application se plaindra que:

"Cette application n'a pas pu démarrer car xxx.dll n'a pas été trouvé."

Je dois donc copier le fichier DLL dans le même répertoire que mon fichier .vcproj.

Existe-t-il un moyen de définir le projet pour rechercher le fichier DLL dans (de préférence) un chemin relatif ou (non préféré) un chemin absolu?

Concept similaire à la façon dont nous définissons l'inclusion et le chemin de la bibliothèque dans les paramètres du projet.

Je veux dire, lorsque je débogue mon application (en frappant F5), l'erreur ci-dessus apparaîtra.

sivabudh
la source

Réponses:

196
  1. Aller aux propriétés du projet (Alt + F7)
  2. Sous Débogage, regardez à droite
  3. Il y a un champ Environnement.
  4. Ajoutez-y votre chemin relatif (relatif au dossier vcproj) ie .. \ some-framework \ lib en ajoutant PATH=%PATH%;$(ProjectDir)\some-framework\libou en ajoutant au cheminPATH=C:\some-framework\lib;%PATH%
  5. Appuyez à nouveau sur F5 (débogage) et cela devrait fonctionner.
sivabudh
la source
15
Le champ Environnement accepte les paires NAME = VALUE délimitées par des points-virgules. Ajoutez à la variable PATH pour que le débogueur VS recherche des emplacements supplémentaires pour les DLL: PATH =% PATH%; $ (ProjectDir) lib
Brent Faust
1
Existe-t-il une méthode similaire pour la version Release?
Narek
J'avais besoin d'ajouter le chemin dll à la variable $ (LibraryPath) (ou de l'inclure dans la liste sous les répertoires de la bibliothèque sur le paramètre Propriétés de configuration-> Répertoires VC ++).
Foster Boondoggle
1
@ SlippD.Thompson Ouais, tu as raison. Mais vous pouvez obtenir la même chose en utilisant Alt + p, p à la place.
Jenix le
1
@ SlippD.Thompson Ah, en lisant à nouveau votre commentaire, je pense que j'ai mal compris ce que vous vouliez dire. Oui je suis d'accord. Mais au moins, il existe des raccourcis clavier qui n'ont jamais été modifiés dans Visual Studio, et «Alt + p, p» en fait partie. Il était là avec «Alt + F7», ce qui signifie maintenant autre chose comme vous le savez. De plus, «Alt + p, p» signifie simplement «Menu Projet> * Propriétés».
Jenix
7

Le chemin de recherche utilisé par le chargeur lorsque vous appelez LoadLibrary () peut être modifié à l'aide de la fonction SetDllDirectory () . Vous pouvez donc simplement appeler ceci et ajouter le chemin d'accès à votre dépendance avant de le charger.

Voir aussi Ordre de recherche des DLL .

i_am_jorf
la source
7

Parcourez les propriétés du projet -> Chemins de référence

Ensuite, ajoutez un dossier avec des DLL

kravits88
la source
4
Veuillez ne pas publier de réponses identiques à plusieurs questions. Publiez une bonne réponse, puis votez / marquez pour fermer les autres questions comme des doublons. Si la question n'est pas un doublon, adaptez vos réponses à la question.
durron597
1
de loin la meilleure réponse :)
Rathma
2
Cela ne semble pas être disponible dans Visual Studio 2015 dans un projet C ++. Quelle combinaison de version de Visual Studio et de type de projet prend en charge cette option?
Filip Bártek
La question d'OP concernait C ++ mais cette réponse est pour C #.
Jenix le
Cela n'a pas fonctionné pour moi avec C # et VS2017
mherzog
4

Une autre possibilité serait de définir le Working Directorysous les options de débogage pour être le répertoire contenant cette DLL.

Edit: J'allais mentionner l'utilisation d'un fichier batch pour démarrer Visual Studio (et définir la variable PATH dans le fichier batch). Alors j'ai fait un peu de recherche et j'ai vu que cette même question avait été posée il n'y a pas longtemps dans ce post . La réponse suggère l'option de fichier de commandes ainsi que les paramètres du projet qui peuvent apparemment faire le travail (je ne l'ai pas testé).

Mark Wilkins
la source
et si je dépends de 2 dll, chacun vit dans son propre répertoire? (J'ai simplifié ma question ci-dessus)
sivabudh
Je ne pense pas qu'il serait possible de faire fonctionner cette solution pour plus d'un répertoire unique.
Mark Wilkins
3

Dans les propriétés de votre projet (clic droit sur le projet, cliquez sur le bouton de propriété) ▶ Propriétés de configuration ▶ Événements de construction ▶ Événements de post-construction ▶ Ligne de commande.

Modifiez et ajoutez une instruction à la ligne de commande. par exemple, copiez botan.dll du chemin source vers l'emplacement où est exécuté le programme.

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

Propriétés du projet

Joma
la source
Je ne sais pas si c'est juste de le faire, mais l'EDI me donne cette option et cela a été utile, je pense que c'est une bonne option si je veux copier tous les fichiers nécessaires dans un autre dossier pour distribuer votre programme. Sort simple mais efficace. Ici, dans cette question, il y a différentes réponses pour atteindre le même but. Mais j'utilise cette option et évite bien des maux de tête.
Joma
Les autres options n'ont pas fonctionné pour moi, seulement celle-ci, mais il semble que les autres devraient être la bonne voie à suivre.
rjferguson
-1

Je sais que cette question avait reçu une réponse il y a des années, mais pour ceux comme moi qui avaient besoin de changer l'endroit où le débogueur démarre l'application, modifiez la propriété de commande sous Propriétés du projet -> Débogage.

TheOriginalCole
la source