如何在 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 断点

在 Visual Studio 中复制 DLL 的依赖项

如何在 Visual Studio 2010 中设置环境变量?

如何在visual studio 2013中设置角度2?