我有一个依赖于多个托管库的应用程序。这些托管库又依赖于一些非托管库。
当我将应用程序部署到运行 XP 的计算机时,它运行良好。当我在运行 Vista 的计算机上执行相同操作时,我收到 DLL 未找到异常。
我尝试了 VS2010 安装项目和 NSIS 安装程序来进行部署,这两种情况都是相同的。
为什么会发生这种情况?我能做些什么来解决这个问题?
更新 - 更多详细信息
- 两个安装程序都会检查 .NET 4.0 的安装情况,并在需要时进行安装
- Vista 计算机是 64 位,但安装会按预期定向到 x86 程序文件文件夹
- 在这两种情况下我都有一个管理员帐户
- DLL 与可执行文件保存在同一目录中
- 据我所知,文件已复制到正确的目录
更新2
- 完整错误位于 http://pastebin.ca/2046487
- DLL 是 Audiere.Net.dll,它是我的一个,是一个托管库。
我不确定该错误是否意味着它无法找到 Audiere.Net.dll,或者是否因为找不到它的依赖项之一而无法加载它。
更新 3 - 来自 Process Monitor 的内容
运行进程监视器后(感谢 Mehrdad!),有几个条目的状态不是“成功”。其中一些是“NAME NOT FOUND”,有些是“PATH NOT FOUND”。 (它甚至查询 PDB 文件,我原以为这些文件仅由调试器使用。)很难看出哪些条目可能是导致实际失败的条目。无论如何,我已经uploaded the log (过滤以具有相关路径)以防它对任何人都有意义。
更新 4 - 添加了 .pdb 文件
所以我有点绝望,并将 .pdb 文件包含到安装程序的输出中。我以为这没什么用,但实际上却导致了一个更有用的错误。我现在得到一个 BadImageFormatException,而不是简单地说找不到 DLL。谷歌搜索告诉我,这是在 x86 上编译但在 x64 上运行的二进制文件的常见问题(就像 Vista 机器一样)。
建议的补救措施是强制它以 x86 为目标,但 Audiere.Net.dll 已经这样做了。问题可能出在它所包装的库上吗?
最佳答案
也许存在某种重定向实际上并没有让您的应用安装在预期的文件夹中?
我们需要更多细节,但是您是为用户安装还是为机器安装?您是管理员吗? DLL 通常位于哪里?
编辑:尝试使用 Process Monitor监视实际正在访问的文件。
关于c# - 为什么我在 Vista 上可能会遇到 DLL 未找到异常,但在 XP 上却不会?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5667488/