【问题标题】:Could not load file or assembly 'MySql.Data, Version=6.2.2.0无法加载文件或程序集'MySql.Data,版本 = 6.2.2.0
【发布时间】:2010-01-11 10:06:39
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# .net mysql database


    【解决方案1】:

    听起来我迟到了 2 年才回复这篇文章,但它可能对那些仍然面临这个问题的人有所帮助,所以这是我在 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

    【讨论】:

    • 设置“复制到本地”解决了我的 Godaddy 托管问题。谢谢和+1 :)
    • 在哪里可以找到 GAC?
    • 我遇到了这个问题,因为我传递给dbmetal 的强程序集名称与我的 GAC 中的版本不匹配。使用gacutil /l MySql.Data 检查您的 GAC 中的版本(如果有)。
    • @KMX 我有Mysql dll 的 3 个点网版本,要复制哪一个?
    【解决方案2】:
    1. 开始菜单中的快捷方式是否正确设置了工作目录? (我怀疑这是最有可能的答案)

    2. GAC(全局程序集缓存)中是否安装了不同/不正确版本的 MySql.Data.dll?我以前见过这会给出类似的错误消息。

    【讨论】:

    • +1 用于提及缓存。不知道为什么我之前错过了你的答案:(
    • @Azhar - 当时是 1 还是 2? :)
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      当这件事发生在我身上时,通常是两件事之一:

      确保出现错误的计算机上存在 MySql.Data。 (令人难以置信的是文件丢失的频率有多高 :-))

      如果 MySql.Data 是混合模式(本机和托管代码)32 位 DLL。并且您的可执行文件指定“任何 CPU”。在具有 64 位 .NET 的 64 位机器上,这将失败并显示您收到的错误消息。一种解决方案是将“x86”指定为可执行文件的目标。

      【讨论】:

      • 刚刚看了一个MySql.Data。它看起来不像是混合模式或绑定到 32 位。我的第二个猜测可能与这种情况无关
      【解决方案5】:

      汤米的理由很有道理:

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

      检查你的 .config 文件:

      当您要添加新的引用时,将该 verisonNr 与文件的 versionNr 进行比较。

      解决方案:

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

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

        • 另外,如果软件产品配置了旧版本的连接器(例如 6.9.9),您不能只安装当前的 mysql 连接器(例如 8.0),而是必须参考供应商,以及支持哪个版本
        【解决方案7】:

        我在 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>
        

        【讨论】:

          【解决方案8】:

          确保您放在项目文件夹中的 MySql.Data DLL 是正确的版本(在本例中为 6.2.2.0)。

          【讨论】:

            猜你喜欢
            • 2014-01-30
            • 2023-04-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-11-19
            • 2016-12-22
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多