如何在 Visual Studio 中设置 DLL 文件的路径?
Posted
技术标签:
【中文标题】如何在 Visual Studio 中设置 DLL 文件的路径?【英文标题】:How do I set the path to a DLL file in Visual Studio? 【发布时间】:2011-01-08 08:07:37 【问题描述】:我开发了一个依赖于 DLL 文件的应用程序。当我调试我的应用程序时,应用程序会抱怨:
“此应用程序无法启动,因为找不到 xxx.dll。”
所以我必须将 DLL 文件复制到与我的 .vcproj 文件相同的目录中。
有没有办法将项目设置为在(最好)某个相对路径或(不是首选)某个绝对路径中查找 DLL 文件?
类似于我们在项目设置中设置包含和库路径的概念。
我的意思是当我调试我的应用程序(点击F5)时会弹出上述错误。
【问题讨论】:
【参考方案1】:-
转到项目属性 (Alt+F7)
在调试下,向右看
有一个环境字段。
在此处添加您的相对路径(相对于 vcproj 文件夹),即 ..\some-framework\lib 通过附加
PATH=%PATH%;$(ProjectDir)\some-framework\lib
或预先添加到路径 PATH=C:\some-framework\lib;%PATH%
再次按 F5(调试),它应该可以工作。
【讨论】:
环境字段采用 NAME=VALUE 分号分隔的对。附加到 PATH 变量以让 VS 调试器搜索 DLL 的其他位置:PATH=%PATH%;$(ProjectDir)lib 发布版本也有类似的方法吗? Alt-F7 会弹出一个临时对话框,列出活动工具窗口和活动文件(Visual Studio 2017 社区)。有没有办法通过老式的菜单命令访问项目属性?我好像没找到。 @SlippD.Thompson 是的,你是对的。但是你可以使用 Alt + p, p 来实现同样的效果。 @SlippD.Thompson 啊,再次阅读您的评论,我想我误解了您的意思。是的我同意。但至少,在 Visual Studio 中有一些热键从未改变,“Alt + p, p”就是其中之一。它与“Alt + F7”一起出现,这意味着现在你知道的其他东西。此外,“Alt + p, p”仅表示“项目菜单 > * 属性”。【参考方案2】:浏览项目属性 -> 参考路径
然后添加带有 DLL 的文件夹
【讨论】:
请不要对多个问题发布相同的答案。发布一个好的答案,然后投票/标记以关闭其他问题作为重复问题。如果问题不是重复的,调整您对该问题的回答。 迄今为止最好的答案:) 这似乎在 Visual Studio 2015 的 C++ 项目中不可用。 Visual Studio 版本和项目类型的哪个组合支持此选项? OP 的问题是关于 C++,但这个答案是针对 C#。 我需要在调试模式下为特定的 dll 使用不同的 dll,这怎么可能?【参考方案3】:调用 LoadLibrary() 时加载程序使用的搜索路径可以通过使用SetDllDirectory() 函数进行更改。因此,您可以在加载之前调用它并添加依赖项的路径。
另见DLL Search Order。
【讨论】:
【参考方案4】:另一种可能性是将调试选项下的Working Directory
设置为具有该 DLL 的目录。
编辑:我要提到使用批处理文件来启动 Visual Studio(并在批处理文件中设置 PATH 变量)。于是做了一些搜索,发现不久前in this post 也提出了同样的问题。答案表明批处理文件选项以及显然可以完成这项工作的项目设置(我没有测试它)。
【讨论】:
如果我依赖 2 个 dll,每个都在自己的目录中怎么办? (我在上面简化了我的问题) 我认为这个解决方案不可能适用于多个目录。【参考方案5】:在您的项目属性中(右键单击项目,单击属性按钮)▶ 配置属性 ▶ 构建事件 ▶ 发布构建事件 ▶ 命令行。
编辑并向命令行添加一条指令。 例如,将 botan.dll 从源路径复制到正在执行程序的位置。
copy /Y "$(SolutionDir)ProjectDirs\x64\Botan\lib\botan.dll" "$(TargetDir)"
【讨论】:
我不知道这样做是否正确,但是 IDE 为我提供了该选项并且它很有用,如果我想将所有必要的文件复制到另一个文件,我认为这是一个不错的选择文件夹来分发你的程序。简单的咒语但有效。在这个问题中,有不同的答案可以达到相同的目的。但是我使用这个选项,避免了很多麻烦。 其他选项对我不起作用,只有这个选项,但似乎其他选项应该是正确的方法。【参考方案6】:我有同样的问题,我的问题与路径无关。我的一个 dll-s 是用 c++ 编写的,事实证明,如果你的 Visual Studio 不知道如何打开一个 dll 文件,它会说它没有找到它。我所做的是找到它没有找到的 dll,而不是在我的目录中搜索该 dll 并在单独的 Visual Studio 窗口中打开它。在尝试浏览该项目的解决方案资源管理器时,Visual Studio 说它无法显示里面的内容,并且我需要一些额外的扩展名,以便它可以打开这些文件。果然,在安装了推荐的扩展(在我的情况下与 c++ 有关)之后,
“此应用程序无法启动,因为找不到 xxx.dll。”
错误奇迹般地消失了。
【讨论】:
最好将扩展名添加到答案中。 我同意,但正如我之前所写,我刚刚安装了 Visual Studio 推荐的内容。它大约有 4GB 的数据,因为我不知道真正需要什么,所以我只是安装了所有这些数据,并没有仔细研究每个项目。 看起来 DLL 有一个依赖项(即需要另一个 DLL),在您安装 VC++ 之前,该依赖项不存在或至少不在您的 PATH 上。【参考方案7】:我知道这个问题几年前就已经回答过了,但是对于像我这样需要更改调试器启动应用程序的位置的人,请更改项目属性 -> 调试下的命令属性。
【讨论】:
以上是关于如何在 Visual Studio 中设置 DLL 文件的路径?的主要内容,如果未能解决你的问题,请参考以下文章
如何修复 Visual Studio 2015 中的错误 MSVCP120D.dll?
如何从visual studio 2013中禁用mscorlib.dll?
如何在 Visual Studio 2008 或 Visual Studio 2010 中设置 JavaScript 断点