【问题标题】:Missing DLL in Release but not in DebugRelease 中缺少 DLL,但 Debug 中没有
【发布时间】:2021-06-25 18:48:11
【问题描述】:

我正在将旧的 MFC 应用程序从 Visual Studio 2008 移植到 Visual Studio 2019。

在此过程中,已将旧的 DLL 库合并到源代码中,以删除开发中的库构建步骤。

现在,在默认的 Debug 配置下调试时,该程序可以完美运行;但是,在发布配置中我得到:

代码执行无法继续,因为找不到MSVCR90.dll

我想这意味着MSVCR90d.dll在调试模式下成功找到,但由于某种原因找不到DLL的发布版本。

我已经尝试了下载 Visual C++ 运行时可再发行组件、更改为静态链接运行时库以及在 Google 的第一个结果中找到的大多数其他常规步骤。

Visual Studio 的所有中间版本都本地安装在开发机器上(2008、2010、2015、2017 和 2019)。

还有什么我可以尝试的吗?

【问题讨论】:

  • 查找旧代码中引用该 DLL 的任何部分并删除该引用。较新的 VS 版本,使用较新版本的编译器,应使用适当匹配的运行时 DLL。
  • 在启动时使用 procmon.exe。找出加载程序在哪里寻找文件。找出除了 msvcr90.dll 之外它无法加载的文件。验证 msvcr90.dll 是否确实存在于您的路径中。
  • @satazero 1) Visual Studio 对每个配置都有不同的设置。因此,也许您从调试设置中删除了对这些库的链接,而不是从发布中删除。 2) #ifdef DEBUG ... #endif 是一种结构,有时会被使用(以及它的 #ifndef DEBUG 对应物)。
  • @thomiel 这指出了一个明显的错误。 Release 配置中仍有一个 DLL 静态链接,现在已集成到实际源代码中。非常感谢,请发表答案,我会接受!
  • @satazero 好的,我添加了评论作为答案。

标签: c++ visual-studio mfc


【解决方案1】:

如果您安装 Dependency Walker https://dependencywalker.com 并准确查看缺少的内容以及版本和调试版本的差异,则可以避免所有猜测。

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 2021-12-05
    • 1970-01-01
    相关资源
    最近更新 更多