Visual Studio 2008: Use external Debug-DLL for Deb

2019-05-16 21:51发布

问题:

Short version: If running a program from VS2008 in Release mode, I want it to use pathA\externaldll.dll. If running a program from VS2008 in Debug mode, I want it to use pathB\externaldll.dll

Long version: I have a programm that is linked against external dll-files (VTK). I have built the external application myself in both Debug and Release mode. The external dll-files are located like this:

<some path>\Debug\externalDll.dll
<some path>\Release\externalDll.dll

(so they are called the same, but have different folders).

I want to step into the external code for Debug Builds, but I want the Release Builds to use the Release DLLs for testing the execution time (I process big datasets).

Linking to the according dlls is easy, as I have project settings for that. But when executing, Visual Studio takes the first dll it finds within the PATH environment variable.

Cumbersome solution idea: Having the PATH variable like: PATH=;%CURRENTDLLPATH%; and setting CURRENTDLLPATH in a post-build-step. Is there no solution built-in into VS2008?

回答1:

Actually there is a built-in and easy way:

The "Environment"-Variable within "project settings"/Debugging.

So setting the Environment-Variable to

PATH=C:\Paraview\ParaView-3.8.0\gen\bin\$(ConfigurationName);%PATH%

for the project to be exectued does the trick.

The question was answered several times here, I just didn't find it (e.g. How do I set a path in visual studio?)



回答2:

Why don't you give different file names to the external Dlls in Debug and in Release, and add both directories to the PATH?



回答3:

You could add a build step to copy the correct DLL to the folder in PATH, and make different build steps in Debug and Release mode.



回答4:

Your debug build output files should go to a ./debug folder and your release output files should go to a ./release folder.

You should copy the appropriate external DLL file into this output folder: Use a pre-build step and use the VS macro $(ConfigurationName) to refer to debug/release.