我有一个依赖于几个托管库的应用程序。这些托管库又依赖于一些非托管库。
当我将应用程序部署到运行 XP 的机器上时,它运行良好。当我在运行 Vista 的机器上执行相同操作时,我得到一个 DLL not found 异常。
我已经尝试了 VS2010 安装项目和 NSIS 安装程序来进行部署,这两种情况都是一样的。
为什么会发生这种情况?我能做些什么来绕过它?
更新 - 更多细节
- 两个安装程序都会检查 .NET 4.0 的安装并在需要时进行安装
- Vista 计算机是 64 位的,但安装会按预期定向到 x86 程序文件文件夹
- 在这两种情况下,我都有一个管理员帐户
- DLL 保存在与可执行文件相同的目录中
- 据我所知,文件被复制到正确的目录
更新 2
- 完整的错误在http://pastebin.ca/2046487
- DLL 是 Audiere.Net.dll,它是我的一个并且是一个托管库。
我不确定该错误是否意味着它找不到 Audiere.Net.dll,或者它是否无法加载它,因为它的依赖项之一找不到。
更新 3 - 来自进程监视器的东西
运行进程监视器(感谢 Mehrdad!)后,有几个条目的状态不是“SUCCESS”。其中一些是“未找到名称”,有些是“未找到路径”。(它甚至可以查询 PDB 文件,我原以为这些文件仅供调试器使用。)很难看出哪些条目可能导致实际失败。无论如何,我已经上传了日志(过滤以具有相关路径)以防它对任何人都有意义。
更新 4 - 添加了 .pdb 文件
所以我有点绝望,并将 .pdb 文件包含在安装程序的输出中。我以为它没有用,但它实际上导致了一个更有用的错误。我现在得到了一个 BadImageFormatException,而不是简单地说找不到 DLL。谷歌搜索告诉我,这是在 x86 上编译但在 x64 上运行的二进制文件的常见问题(就像 Vista 机器一样)。
建议的补救措施是强制它以 x86 为目标,但 Audiere.Net.dll 已经是。问题可能出在它包装的库上吗?