【问题标题】:DLL Hell - My application throws an error if Version 6.9.3.0 OR 6.8.3.0 of MySql.Data.dll is missingDLL Hell - 如果 MySql.Data.dll 版本 6.9.3.0 或 6.8.3.0 缺失,我的应用程序会抛出错误
【发布时间】: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.DataSpecificVersion 属性更改为 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/…
  • 啊,谢谢你的建议!

标签: c# mysql


【解决方案1】:

MySql.DataSpecificVersion 属性更改为对True 的引用解决了该问题。

我的假设是,应用程序不知何故同时在寻找 6.8.3.0.6.9.3.0. 版本 - 但是通过指定特定版本,它不会“混淆自己”,而只是寻找 @ 987654326@,就在那里。

【讨论】:

  • 您是否尝试过使用 ILDASM 并检查相关 DLL 中的依赖 DLL 版本。项目中的这个和绑定重定向/.net 框架版本较早为我工作
猜你喜欢
  • 2013-04-06
  • 1970-01-01
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多