如何在Visual Studio中将路径设置为DLL文件?


130

我开发了一个依赖于DLL文件的应用程序。当我调试应用程序时,该应用程序会抱怨:

“此应用程序未能启动,因为未找到xxx.dll。”

因此,我必须将DLL文件复制到与.vcproj文件相同的目录中。

有没有一种方法可以将项目设置为在(最好是)某些相对路径或(不是最好)某些绝对路径中寻找DLL文件?

与我们在项目设置中设置包含和库路径类似的概念。

我的意思是,当我调试应用程序(点击F5)时,会弹出上述错误。

Answers:


196
  1. 转到项目属性(Alt + F7)
  2. 在“调试”下,向右看
  3. 有一个“环境”字段。
  4. 在此添加相对路径(相对于vcproj文件夹),即PATH=%PATH%;$(ProjectDir)\some-framework\lib通过在路径的前面或后面添加.. \ some-framework \ libPATH=C:\some-framework\lib;%PATH%
  5. 再次按F5(调试),它应该可以工作。

15
环境字段采用NAME = VALUE以分号分隔的对。附加到PATH变量以使VS Debugger搜索DLL的其他位置:PATH =%PATH%; $(ProjectDir)lib
Brent Faust 2012年

1
是否也有类似的方式来进行发布构建?
纳雷克

我需要将dll路径添加到$(LibraryPath)变量(或将其包含在“配置属性”->“ VC ++目录”设置中“库目录”下的列表中)。
Foster Boondoggle '18年

1
@ SlippD.Thompson是的,您是对的。但是您可以使用Alt + p代替p来实现相同的目的。
Jenix

1
@ SlippD.Thompson啊,再次阅读您的评论,我想我误解了您的意思。是的我同意。但是至少,有一些热键从未在Visual Studio中更改过,“ Alt + p,p”就是其中之一。它与“ Alt + F7”一起出现,这意味着您现在知道了其他内容。同样,“ Alt + p,p”仅表示“项目菜单> *属性”。
Jenix

7

可以通过使用SetDllDirectory()函数来更改加载程序在调用LoadLibrary()时使用的搜索路径。因此,您可以调用它,然后在加载依赖项之前将其添加到依赖项中。

另请参见DLL搜索顺序


7

浏览项目属性->参考路径

然后添加带有DLL的文件夹


4
请不要针对多个问题发布相同的答案。发布一个好的答案,然后投票/标记以将其他问题重复进行关闭。如果问题不是重复的,请定制问题的答案。
durron597 2015年

1
到目前为止最好的答案:)
Rathma '17

2
这似乎在Visual Studio 2015中的C ++项目中不可用。Visual Studio版本和项目类型的哪种组合支持此选项?
FilipBártek18年

OP的问题是关于C ++的,但是这个答案是针对C#的。
Jenix

在C#和VS2017上对我不起作用
mherzog

4

另一种可能性是Working Directory将调试选项下的设置为具有该DLL的目录。

编辑:我要提到使用批处理文件启动Visual Studio(并在批处理文件中设置PATH变量)。然后进行了一些搜索,发现不久前在这篇文章中也问过这个完全相同的问题。答案表明批处理文件选项以及显然可以完成此工作的项目设置(我没有对其进行测试)。


如果我依赖2个dll,每个dll都位于自己的目录中怎么办?(我在上面简化了我的问题)
sivabudh,2010年

我认为不可能使此解决方案适用于多个目录。
马克·威尔金斯

3

在项目属性中(右键单击项目,然后单击属性按钮)▶配置属性▶构建事件▶发布构建事件▶命令行。

编辑一条指令并将其添加到命令行。例如,将botan.dll从源路径复制到要执行该程序的位置。

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

项目属性


我不知道这样做是否正确,但是IDE给了我这个选项,并且它很有用,如果我想将所有必要的文件复制到另一个文件夹来分发程序,我认为这是一个不错的选择。简单的拼写但有效。在这个问题中,有不同的答案可以达到相同的目的。但是我使用此选项,可以避免很多麻烦。
乔马

其他选项对我来说不起作用,仅对这个选项无效,但似乎其他选项应该是正确的方法。
rjferguson

-1

我知道这个问题已经在几年前回答过,但是对于像我这样需要更改调试器启动应用程序位置的人,请在“项目属性”->“调试”下更改命令属性。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.