【问题标题】:Visual Basic program cannot find DLL in applications root folderVisual Basic 程序在应用程序根文件夹中找不到 DLL
【发布时间】:2017-06-06 00:38:12
【问题描述】:

我在 Visual Basic 中使用 Visual Studio 2013 构建了一个程序。我正在使用一组 DLL 与一些外部硬件进行通信。我开发该软件的计算机是 Win7 64 位机器,我可以毫无问题地编译和运行该软件。我还有另一台电脑(Surface Pro 3 64bit),我用它来测试我的软件,它也能正常工作。基本上我只是找到开发计算机的调试目录并将EXE和支持DLL复制到新计算机并运行EXE。这一切都适用于我的 Surface pro 3 电脑。

我的公司为我们的生产部门购买了其他一些 Surface pro 3 计算机,我正在尝试让软件也能在这些计算机上运行。我做同样的事情。从开发计算机的调试目录中获取 EXE 和支持 DLL。除了在这些计算机上运行软件程序时,它告诉我找不到该程序的 DLL。 DLL 位于应用程序的文件夹中,但它说找不到。

我尝试了多种方法,例如发布软件并在安装中包含 DLL,然后在“问题”计算机上运行安装。这仍然行不通。同样的问题,找不到DLL。

【问题讨论】:

  • 我建议不要从调试文件夹复制,而是从 bin 文件夹复制最终结果。你如何复制应用程序?您是否使用链接执行?哪个dll?告诉我们有关错误的更多详细信息
  • 3 台机器上的操作系统位数是多少?是64位还是32位?也请准确告诉我们收到的错误信息
  • 错误只是说无法加载DLL,找不到指定的DLL。 0x8007007E.
  • 对不起,另外,我注意到它可以在安装了 Visual Studio 的计算机上运行,​​但其他没有安装 Visual Studio 的计算机会收到错误消息。
  • 为了复制应用程序,我正在复制调试目录中的所有文件,其中包括 dll、应用程序和其他应用程序输出。

标签: visual-studio dll visual-studio-2013


【解决方案1】:

这可能是很多事情:

  1. .NET 版本不正确 - 新计算机上是否安装了目标版本的 .NET?
  2. 找不到所需的 DLL,您应该启用程序集绑定失败日志记录并重试 - How to enable assembly bind failure logging (Fusion) in .NET

【讨论】:

  • CCBlackburn 目标单元具有适当的 .NET 框架。我在 fusion 中启用了程序集绑定日志记录,并且在运行由 fusion 记录的软件时根本没有看到任何错误。但是,我仍然收到错误,即即使软件仍在应用程序目录中,该软件也找不到该软件的 DLL。
  • 好的,再试一试,运行 Sysinternals Procmon - live.sysinternals.com/Procmon.exe 并过滤它以获得 DLL 的名称。这应该显示系统在哪里搜索 DLL,这可能会为您提供有关正在发生的事情的线索
【解决方案2】:

事实证明,我引用的 DLL 需要在计算机上安装 VC++ 可再发行包。我在所有有问题的计算机上下载并安装了这些,现在软件可以识别 DLL 并运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    相关资源
    最近更新 更多