2010-01-26 5 views
6

J'ai une application C++ intégrée dans Visual Studio (2008) et liée à une DLL Boost. Lors du débogage, il semble que j'ai besoin de copier la DLL Boost dans le dossier de débogage afin que l'exe que je cours dans l'EDI puisse s'y connecter. Je pourrais utiliser une étape de post-construction pour copier la DLL, mais je me demandais s'il existe un paramètre dans Visual Studio qui peut lui donner un chemin de recherche supplémentaire pour les DLL lors du débogage?Évitez de copier une DLL tierce dans le dossier de débogage

+0

http://stackoverflow.com/questions/1776060/how-to-make-visual-studio-copy-dll-to-output-directory –

+0

La question fait référence se rapporte à l'aide d'un étape post-construction, que je souhaite éviter. – Permaquid

+1

JaredPar a fourni l'indice pour contrôler l'environnement, plutôt que de rechercher un emplacement de recherche de bibliothèque Visual Studio. Il se trouve qu'il existe un paramètre Visual Studio qui fournit exactement ce que je voulais, en ajoutant (apparemment) un autre chemin à la variable d'environnement PATH: Configuration Properties> Debugging | Environnement. C'est par projet, et vous pouvez utiliser des variables d'environnement. La seule pièce manquante est la documentation qui décrit exactement comment l'environnement de débogage que je veux ajouter est fusionné dans l'existant. – Permaquid

Répondre

4

Il y a une légère mauvaise perception ici. Visual Studio lui-même ne contrôle pas directement le chargement des DLL dans une application pendant que vous déboguez. Le chargement des DLL est directement contrôlé par le système d'exploitation. Le système d'exploitation recherche un ensemble de répertoires intéressants pour les DLL lorsqu'une charge est demandée.

La manière principale dont VS influence les DLL chargées est due à leur copie dans le répertoire de sortie de construction. C'est généralement le répertoire dans lequel l'application est exécutée et par conséquent est l'un des chemins que le système d'exploitation va rechercher les DLL nécessaires.

Quels répertoires le système d'exploitation recherche est contrôlé par quelques éléments. Le plus facile à modifier est la variable d'environnement (LIBPATH je crois). En mode Debug, vous pouvez modifier cette variable d'environnement pour qu'elle pointe vers votre autre répertoire et charger la DLL à partir de là.

Toutefois, vous ne pouvez rien définir directement dans Visual Studio.

+0

Il semble que vous pouvez modifier l'environnement au moment du débogage en définissant l'environnement sur PATH = $ (PATH); peut contenir des variables d'environnement référencées à l'aide de la syntaxe $(). Vous avez également besoin de fusionner = Oui. Je serais intéressé s'il y a une documentation qui explique les détails. – Permaquid

+0

J'ai marqué cela comme "la" réponse parce que c'était la réponse la plus utile. Malheureusement le bit qui dit "il n'y a rien que vous pouvez définir dans Visual Studio" n'est pas correct (à mon avis) - voir mon commentaire sous la question.Cependant, merci pour le conseil. – Permaquid

1

Il n'y a pas beaucoup d'options sur Windows pour les DLL qui sont implicitement liées à l'EXE. Short de stocker la DLL dans le même dossier que le fichier EXE, vous pouvez le stocker dans un répertoire répertorié dans la variable d'environnement PATH. Seul c: \ windows \ system32 est garanti être répertorié, vous ne pouvez pas utiliser raisonnablement ce dossier. Un programme d'installation qui change l'environnement du système fonctionnerait, mais ce n'est pas raisonnable.

La seule option réelle consiste à stocker la DLL dans le cache côte à côte WinSxS. Vous devrez écrire un manifeste pour que Windows puisse trouver la DLL. Et vous devrez écrire un programme d'installation pour mettre la DLL dans WinSxS. Étant donné la qualité de la documentation, vous devez vraiment, vraiment vouloir le faire.

Si cela n'est qu'une considération pour le débogage, alors peut-être que ce n'est pas vraiment un gros problème de changer le PATH sur votre machine dev. Utilisez le Panneau de configuration, l'applet Système.

Questions connexes