DLL Hell - 如果缺少版本6.9.3.0或6.8.3.0的MySql.Data.dll,我的应用程序将抛出错误

Eil*_*idh 7 c# mysql

问题背景

我在C#中编写了一个使用MySqlConnector的应用程序.我已经添加了MySql.Data.dll(版本6.9.3.0)References- 这一切都在我的电脑上运行(运行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,但我想了解为什么会发生这种情况.

尝试诊断问题的步骤

  • 检查项目References后看到堆栈溢出这个问题并确认参考,MySql.Data.dll已添加到项目中,其版本一起(6.9.3.0).

  • 搜索了与异常错误消息相关的结果,并在Stack Overflow上发现了这篇文章,描述了它的原因(我知道了,但它证实了这一点)

  • 一位同事让我确认Reference 的SpecificVersion属性MySql.Data设置为False(它是).

  • 尝试按照下面的答案中的建议添加程序集绑定到配置 - 它没有帮助,抛出相同的错误.

  • MySqlData.dll版本替换为另一台PC上6.8.3.0的"脏修复",看看发生了什么.它现在抛出与以前相同的错误,但是丢失了6.9.3.0.

  • 要求一位同事在他的(Windows 7)PC上运行该应用程序 - 没有生成错误,并且它按预期工作.

  • 我尝试Dependency Walker.exe建议的评论者中使用该实用程序,但它只显示以下.dll缺失 - IESHIMS.DLL(在两台PC上),WER.DLL(在XP PC上)和GPSVC.DLL(在我的PC上).什么都没有MySql.Data.dll.(虽然我已经知道在这种情况下这不是一个有用的工具 - 请看这个问题.)

  • 一时兴起,我决定将Reference 的SpecificVersion属性更改MySql.DataTrue- 这解决了问题.


附加信息

我的app.config文件 -

<?xml version="1.0"?>
<configuration>
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/> 
    </startup>
</configuration>
Run Code Online (Sandbox Code Playgroud)

Eil*_*idh 4

更改引用SpecificVersion的属性MySql.DataTrue解决问题。

我的假设是,应用程序以某种方式同时寻找版本6.8.3.0.,并且6.9.3.0.同时 - 然而,通过指定特定版本,它不会“混淆自己”,而只会寻找6.9.3.0.就在那里的 。