C# 无法加载文件或程序集';MySql.Data,版本=6.2.2.0

C# 无法加载文件或程序集';MySql.Data,版本=6.2.2.0,c#,.net,mysql,database,C#,.net,Mysql,Database,我正在使用c#和数据库MySQL开发桌面应用程序。当我在我的机器上安装它的安装程序时,它可以正常工作,但当我在其他机器上安装它时,它会在尝试访问DB时出现以下异常。我正在使用MySQL.Data.dll与MySQL通信 无法加载文件或程序集“MySql.Data,Version=6.2.2.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d”或其依赖项之一。系统找不到指定的文件 和MySql.Data.dll文件存在于Program files文件

我正在使用c#和数据库MySQL开发桌面应用程序。当我在我的机器上安装它的安装程序时,它可以正常工作,但当我在其他机器上安装它时,它会在尝试访问DB时出现以下异常。我正在使用
MySQL.Data.dll
与MySQL通信

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

MySql.Data.dll
文件存在于Program files文件夹中的项目文件夹中


实际上,当我从程序文件中的文件夹运行它时,它运行正常,没有错误,但当我尝试从“开始”菜单中的快捷方式运行它时,它会给出错误。

当这种情况发生在我身上时,通常是两件事中的一件:

确保出现错误的机器上存在MySql.Data。(令人难以置信的是,文件竟然如此频繁地丢失:-)


如果MySql.Data是混合模式(本机代码和托管代码),则为32位DLL。您可以指定“任意CPU”。在具有64位.NET的64位计算机上,此操作将失败,并显示错误消息。解决方案是将“x86”指定为可执行文件的目标

MySQL.data.dll是否与.exe文件位于同一目录中


如果是,MySQL.data.dll是否具有.exe文件所要查找的正确版本/公钥?

请确保放在项目文件夹中的MySQL.data dll的版本正确(本例中为6.2.2.0)

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

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


  • 听起来我迟了2年才回复这篇文章,但这可能对那些仍然面临这个问题的人有所帮助,所以这里是我2012年4月1日美国东部时间下午5点的发现:

    我的一个web应用程序也有同样的问题。我发现当你这样做时,会出现上述问题:

    • MySql.Data.dll
      复制并粘贴到文件夹中的某个位置
    • 您在GAC中有任何版本的
      MySql.Data.dll
      的副本
    虽然应用程序在您的开发机器上运行良好,因为它可以看到文件,但当您在其他机器上部署它时,实际上会带来运行时错误

    在我的例子中,VS2008总是向我指出与您提到的相同的错误。然后我这样做了:

    • 已删除dll的本地副本引用
    • 引用了在GAC中找到的DLL
    • 并通过右键单击->属性,将DLL的属性“Copy Local”设置为“True”
    编辑: 有人问:“GAC在哪里?”:

    汤米的理由很有道理:

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

    检查您的.config文件:

    并在向文件添加新引用时,将该verisonNr与该文件的versionNr进行比较

    解决方案:

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


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

    我也有这个问题,对我来说,它是在项目设置中重新创建连接字符串。它们是为MySQL连接器的早期版本配置的。

    我在web应用程序(C#)中遇到了同样的问题。 我通过更改
    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>
    
    
    
    刚刚查看了一个MySql.Data。它看起来不像是混合模式或绑定到32位。我的第二个猜测可能与本例中提到缓存的+1无关。不知道为什么我以前错过了你的答案:(@Azhar-当时是哪一个,1还是2?:)设置“复制到本地”解决了我在godaddy主机上的问题。感谢和+1:)我在哪里可以找到GAC?@Ankitagarawal GAC在这里我遇到了这个问题,因为我传递给
    dbmetal
    的强程序集名称与我的GAC中的版本不匹配。使用
    gacutil/l MySql.Data
    检查GAC中的版本(如果有)。@KMX我有3个.net版本的
    MySql dll
    要复制哪一个?另外,如果软件产品配置为旧版本的连接器(例如6.9.9),则不能只安装当前的MySql连接器(例如8.0)但必须参考供应商的文档,以及支持哪个版本