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

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

"此应用程序无法启动,因为找不到 xxx.dll."

所以我必须将 DLL 文件复制到与 .vcproj 文件相同的目录中。
是否有一种方法可以设置项目在(最好是)某个相对路径或(不推荐)某个绝对路径中查找 DLL 文件?
类似于我们在项目设置中设置包含和库路径的概念。
我的意思是当我 调试 应用程序(按下 F5)时,上述错误会弹出。
7个回答

242
  1. 进入项目属性(Alt+F7)
  2. 在调试下面,看向右边
  3. 有一个环境字段。
  4. 在那里添加你的相对路径(相对于vcproj文件夹),例如 ..\some-framework\lib ,通过追加 PATH=%PATH%;$(ProjectDir)\some-framework\lib 或者将其前置到路径中 PATH=C:\some-framework\lib;%PATH%
  5. 再次按F5(调试),它应该能够工作了。

20
环境字段使用NAME=VALUE分号分隔对。将其附加到PATH变量中,以使VS Debugger搜索其他位置的DLL:PATH=%PATH%;$(ProjectDir)lib。 - Brent Faust
5
Release 构建也有类似的方法吗? - Narek
2
Alt-F7会带出一个临时对话框,列出活动工具窗口和活动文件(Visual Studio 2017 Community)。然而,是否有通过传统菜单命令进入项目属性的方法呢?我似乎找不到它。 - Slipp D. Thompson
1
@SlippD.Thompson 是的,你说得对。但是你也可以使用 Alt + p, p 来实现同样的效果。 - Jenix
1
@SlippD.Thompson 啊,再次阅读您的评论,我想我误解了您的意思。是的,我同意。但至少,在Visual Studio中有一些热键从未更改,'Alt + p,p'就是其中之一。它与'Alt + F7'一起存在,如您所知,现在意味着其他东西。此外,'Alt + p,p'只是表示“项目菜单> *属性”。 - Jenix
显示剩余8条评论

11

进入项目属性 -> 引用路径

然后添加包含DLL文件的文件夹


4
请勿在多个问题上发布相同的答案。发布一个好的答案,然后投票/标记其他问题为重复。如果问题不是重复的,请根据问题调整你的答案 - durron597
1
迄今为止最好的答案 :) - Rathma
2
在Visual Studio 2015的C ++项目中似乎无法使用此选项。哪种Visual Studio版本和项目类型的组合支持此选项? - Filip Bártek
3
原问题是关于C++的,但这个回答是针对C#的。 - Jenix
1
我需要在特定的dll中使用不同的调试模式,这可能吗? - user10997800

9
当您调用LoadLibrary()时,加载器使用的搜索路径可以通过使用SetDllDirectory()函数进行更改。因此,您可以只需调用它并在加载之前添加依赖项的路径即可。
另请参见DLL搜索顺序

6

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

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

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

Project Properties


1
我不确定这样做是否正确,但是IDE给了我这个选项并且它很有用。如果我想将所有必要的文件复制到另一个文件夹以分发程序,我认为这是一个好的选择。简单而有效。在这个问题中,有不同的答案可以达到相同的目的。但是我使用这个选项并避免了许多麻烦。 - Joma
1
其他选项对我没用,只有这一个可以,但似乎其他的选项应该是正确的方法。 - rjferguson

6
另一个可能的解决方案是在调试选项下设置“工作目录”为包含该DLL的目录。
编辑:我本来想提到使用批处理文件启动Visual Studio(并在批处理文件中设置PATH变量)。然后我进行了一些搜索,发现不久前有人问过完全相同的问题在这个帖子中。答案建议使用批处理文件选项以及似乎可以完成工作的项目设置(我没有测试它)。

如果我依赖于两个DLL,每个DLL都存在于自己的目录中,该怎么办?(我在上面简化了我的问题) - sivabudh
我认为将这个解决方案扩展到多个目录是不可能的。 - Mark Wilkins

0

我曾经遇到过同样的问题,但我的问题与路径无关。我的一个dll文件是用c++编写的,结果发现如果你的Visual Studio不知道如何打开一个dll文件,它会说找不到它。我所做的就是找出哪个dll文件没有被找到,然后在我的目录中搜索该dll文件,并在单独的Visual Studio窗口中打开它。当尝试通过该项目的“解决方案资源管理器”导航时,Visual Studio说它无法显示内部内容,并且需要一些额外的扩展程序才能打开这些文件。果然,在安装了推荐的扩展程序之后(在我的情况下与c++有关),错误神奇地消失了。

"此应用程序无法启动,因为找不到xxx.dll文件。"

错误神奇地消失了。


1
最好在答案中加入扩展名的名称。 - Ruli
我同意,但正如我之前所写的,我只是安装了Visual Studio推荐的内容。大约有4GB的数据,由于我不知道真正必要的是什么,所以我只是安装了所有内容,没有仔细查看每个项目。 - dinozaver
看起来这个 DLL 有一个依赖项(即需要另一个 DLL),但在安装 VC++ 之前该依赖项不存在或至少不在您的 PATH 中。 - Adrian W

-1

我知道这个问题已经在几年前得到了解答,但对于像我这样需要更改调试器启动应用程序位置的人来说,可以在项目属性 -> 调试下更改命令属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接