2014-12-05 66 views
7

问题背景DLL地狱 - 我的应用程序,如果版本6.9.3.0或MySql.Data.dll的6.8.3.0缺少

我已经写在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的早期版本中添加另一个参考,但我想明白为什么会发生这种情况。采取

步骤来尝试诊断问题

  • 经过该项目的References看到this question on Stack Overflow并确认到MySql.Data.dll参考已经被添加到项目中,其版本(6.9.3.0)沿后。搜索

  • 而言,与异常错误消息,结果发现this article on Stack Overflow描述其原因(这点我是知道的,但它证实了这一点)

  • 一位同事问我,以确认MySql.DataSpecificVersion财产参考设置为False(是)。

  • 尝试添加一个程序集绑定到下面的答案建议的配置 - 它没有帮助,同样的错误被抛出。

  • 将版本号为6.8.3.0MySqlData.dll替换为MySqlData.dll作为“脏修复”来查看发生了什么。它现在抛出与以前相同的错误,但是因为丢失了6.9.3.0

  • 问同事在他的(Windows 7)电脑上运行应用程序 - 没有错误产生,并按预期工作。

  • 我试着用在.exeDependency 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> 
+0

你能显示你的配置文件吗? – 2014-12-05 09:44:10

+0

我已经在上面添加了它。 – Eilidh 2014-12-05 09:47:33

+0

你可以使用DependencyWalker来查看你还没有发现MySQLData.dll是否存在另一个依赖。 – 2014-12-05 11:12:07

回答

4

改变MySql.Data参考的SpecificVersion属性True解决了这一问题。

我的假设是,这些应用是莫名其妙同时寻找6.8.3.0.版本和6.9.3.0.同时 - 但是通过指定特定的版本,它不会“混淆本身”,只是无二6.9.3.0.,这是存在的。

+0

您是否尝试使用ILDASM并检查相关DLL中的依赖项DLL版本。这个和项目中绑定的重定向/ .net框架版本对我来说工作得更早 – Saravanan 2014-12-13 07:42:18

相关问题