无法加载文件或程序集 'MySql.Data, Version=6.2.2.0'。

17

我正在使用c#和MySQL数据库开发桌面应用程序。在我的电脑上安装程序后,它可以正常运行,但是当我在另一台机器上安装时,在尝试访问数据库时会出现以下异常。我使用的是 MySQL.Data.dll 与 MySQL 进行通信。

无法加载文件或程序集“MySQL.Data,Version =6.2.2.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d”或其某个依赖项。系统找不到指定的文件。

MySQL.Data.dll 文件实际上存在于项目文件夹中的 Program files 文件夹内。

实际上,当我从Program file文件夹中的其文件夹运行它时,它可以正常运行而没有错误。但是当我尝试从开始菜单中的快捷方式运行它时,它将出现该错误。

8个回答

23

虽然我回答这篇文章可能已经晚了两年,但对于那些仍在面临此问题的人可能会有所帮助,因此以下是我的发现,日期为2012年4月1日下午5点东部标准时间:

我的一个Web应用程序也遇到了同样的问题。当你执行以下操作时,就会出现这个问题:

  • MySql.Data.dll复制并粘贴到某个文件夹中。
  • 您在GAC中拥有任何版本的MySql.Data.dll

尽管应用程序在开发机器上运行良好,因为它可以看到文件,但是当您将其部署到其他计算机上时,实际上会引发运行时错误。

在我的情况下,VS2008始终指向与您提到的相同错误。然后我做了这件事:

  • 删除dll的本地副本引用
  • 引用GAC中找到的DLL
  • 通过右键单击->属性设置DLL的属性“Copy Local”为“True”。

编辑:

有人问:“GAC在哪里?”:
http://msdn.microsoft.com/en-us/library/yf1d93sz(v=vs.110).aspx


5
使用“复制到本地”功能解决了我在godaddy主机上的问题。谢谢并点赞 :) - Jose Cherian
1
我在哪里可以找到GAC? - Ankit Agrawal
@AnkitAgrawal GAC在这里 http://msdn.microsoft.com/zh-cn/library/yf1d93sz(v=vs.110).aspx - KMX
1
我遇到了这个问题,因为我传递给 dbmetal 的强名称程序集与我的 GAC 中的版本不匹配。使用 gacutil /l MySql.Data 检查您的 GAC 中是否有任何版本。 - DJH
@KMX 我有三个版本的 Mysql dll,应该拷贝哪一个? - Moeez
@Moeez 复制最新的版本,或者在 GAC 中找到最新的版本!确保你始终使用最新的版本,除非你的应用程序明确依赖于其他版本。 - KMX

10
  1. 开始菜单中的快捷方式是否正确设置了工作目录?(我怀疑这可能是最有可能的答案)

  2. 全局程序集缓存(GAC)中是否安装了不同/不正确版本的MySql.Data.dll?我曾经看到过类似的错误信息。


+1 提到缓存。不知道为什么之前错过了你的答案 :( - BinaryMisfit
5
那么,是1还是2呢,@Azhar? :) - Rob

3

MySQL.data.dll是否与.exe文件在同一目录中?

如果是,那么MySQL.data.dll是否具有.exe文件正在寻找的正确版本/公钥?


2
当我遇到这种情况时,通常有两种可能性:
请确保在出现错误的计算机上存在 MySql.Data 文件。(令人难以置信的是,有时缺少文件会导致此类问题 :-))
如果 MySql.Data 是一个混合模式(本地和托管代码)的 32 位 DLL,并且您的可执行文件指定为“任何 CPU”,则在具有 64 位 .NET 的 64 位计算机上,这将导致失败并显示您收到的错误消息。解决方法是将可执行文件的目标指定为“x86”。

刚刚查看了 MySql.Data。看起来它不是混合模式或绑定到32位。我猜测第二个可能与此情况无关。 - Arve

1

我在一个C#的Web应用程序中遇到了同样的问题。 通过更改web.config文件,我解决了这个问题,它引用了版本6.2.2.0,而我的dll是版本8.0.25.0。

<system.data>
  <DbProviderFactories>
    <remove invariant="MySql.Data.MySqlClient" />
    <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" 
      description=".Net Framework Data Provider for MySQL" 
      type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, 
      Version=8.0.25.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
  </DbProviderFactories>
</system.data>

1

Tommy的理由非常充分:

我的项目引用了一个比实际安装在我的开发机器上的MySql.Data.dll旧的版本。这将导致相同的错误。

检查您的.config文件:

并将该versionNr与添加新引用时文件的versionNr进行比较。

解决方案:

1)从配置文件中删除该行并重新添加引用。

2)或卸载MySql .net连接器并安装您的项目所引用的版本。


1
我也遇到了这个问题,对我来说解决方法是在项目设置中重新创建连接字符串。它们之前是为MySQL连接器的旧版本配置的。

如果软件产品配置为旧版本的连接器(例如6.9.9),则不能仅安装当前的mysql连接器(例如8.0),而必须参考供应商的文档,了解支持哪个版本。 - MacMartin

0

请确保您放置在项目文件夹中的 MySql.Data DLL 是正确的版本(在这种情况下为 6.2.2.0)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接