【发布时间】:2014-12-05 09:42:30
【问题描述】:
问题背景
我用 C# 编写了一个使用 MySqlConnector 的应用程序。我已将MySql.Data.dll(版本6.9.3.0)添加到References - 这一切都在我的PC(运行Windows 7)上按预期工作。但是,从最近的版本开始,当我尝试在另一台 PC(运行 Windows XP)上运行该应用程序时,它会在启动时引发异常。
我添加了一个UnhandledExceptionEventHandler,它显示了错误Could not load file or assembly 'MySql.Data, Version 6.8.3.0. (...etc...)' or one of its dependencies. The located assembly's manifest description does not match the assembly reference. File name: 'MySql.Data, Version=6.8.3.0, (...etc...)。
显然它正在寻找版本 6.8.3.0,但只在参考中找到版本 6.9.3.0 - 但我想知道的是 为什么 它正在寻找这个版本,当它与早期版本正常工作时构建,以及 如何 我可以指定要查找的 MySql 版本。
我知道我可以在.dll 的早期版本中添加另一个引用,但我想了解为什么会发生这种情况。
尝试诊断问题所采取的步骤
在看到 this question on Stack Overflow 并确认已将对
MySql.Data.dll的引用及其版本 (6.9.3.0) 添加到项目中后,检查了项目的References。搜索与异常错误消息相关的结果,发现 this article on Stack Overflow 描述了其原因(我知道,但它证实了这一点)
一位同事让我确认
MySql.Data引用的SpecificVersion属性设置为False(确实如此)。尝试按照以下答案中的建议将程序集绑定添加到配置 - 它没有帮助,抛出相同的错误。
将另一台 PC 上的
MySqlData.dll替换为版本6.8.3.0作为“脏修复”以查看发生了什么。它现在抛出与以前相同的错误,但缺少6.9.3.0。请一位同事在他的 (Windows 7) PC 上运行该应用程序 - 没有产生错误,它按预期工作。
我尝试在
.exe上使用Dependency Walker实用程序作为评论者建议,但它只显示以下 .dll 缺失 -IESHIMS.DLL(在两台 PC 上),WER.DLL(在 XP PC 上)和GPSVC.DLL(在我的电脑上)。MySql.Data.dll什么都没有。 (虽然我后来了解到这在这种情况下不是有用的工具 - 请参阅this question。)一时兴起,我决定将
MySql.Data的SpecificVersion属性更改为True的引用 - 这解决了问题。
其他信息
我的app.config 文件 -
<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
</startup>
</configuration>
【问题讨论】:
-
你能显示你的配置文件吗?
-
我已经在上面添加了。
-
您可以使用 DependencyWalker 查看是否存在您尚未发现的对 MySQLData.dll 的其他依赖项。
-
Dependency walker 在这里不是一个好的选择,查看stackoverflow.com/questions/227886/…
-
啊,谢谢你的建议!