【问题标题】:MySQL connector 6.7.4 and Entity Framework 5 exceptionsMySQL 连接器 6.7.4 和 Entity Framework 5 异常
【发布时间】:2013-09-18 20:57:21
【问题描述】:

我下载了MySQL Connector/Net 6.7.4MySQL for Visual Studio 1.0.2,然后跟着these instructions测试了一下:

  1. 创建与现有 MySQL 数据库的连接。
  2. 创建控制台应用程序。
  3. 从现有数据库连接中添加 ADO.NET 实体数据模型
  4. 添加代码生成项EF 5.x DbContext Generator,替换 .tt 文件。
  5. 编写一些从数据库中检索记录的代码。

运行应用程序,我得到了这个异常:

ConfigurationErrorsException:未能找到或加载已注册的 .Net Framework Data Provider。

然后,我在我的 .NET 4.5 项目中添加了对 MySql.DataMySql.Data.Entity 库版本 6.7.4.0 的引用。现在,当我运行应用程序时,我得到了一个不同的异常:

FileLoadException:无法加载文件或程序集 'MySql.Data, Version=6.6.5.0,culture=neutral, PublicKeyToken=c5687fc88969c44d' 或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (HRESULT 异常:0x80131040)

注意版本号,不是我安装的 MySQL Connector 的版本。

如何让它正常工作?

【问题讨论】:

    标签: c# mysql .net entity-framework


    【解决方案1】:

    解决这个问题的诀窍是:

    1. 向项目添加对正确版本的MySql.DataMySql.Data.Entity 库的引用(在我的例子中,.NET 4.5 为 6.7.4.0)。
    2. 以管理员身份运行编辑器编辑machine.config,并将所有出现的MySQL版本6.6.5.0替换为6.7.4.0

    对于第二步,请注意有多个machine.config 文件,每个框架版本(3.0、3.5、4.0)和架构(32 位、64 位)一个。另请注意,.NET 4.5 的 machine.config 文件位于 .NET 4.0 文件夹中。您可以在以下位置找到machine.config 文件:

    C:\Windows\Microsoft.NET\Framework\\Config

    还有:

    C:\Windows\Microsoft.NET\Framework64\\Config

    如果machine.config 文件中没有对 MySQL 的引用,则您可能没有安装 MySQL for Visual Studio。要么这样做,要么将以下内容添加到项目的 app.config 文件中:

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

    但是请注意,当您同时安装MySQL for Visual Studio 将上述sn-p 添加到您的app.config 文件中时,您将收到此异常:

    ConfigurationErrorsException:列“InvariantName”被限制为唯一。值“MySql.Data.MySqlClient”已经存在。

    【讨论】:

    • 在 machine.config 中将版本更改为“6.7.4.0”。这一定是安装程序错误,因为 6.7.4 是在全新安装的 Windows 上安装的,但对 6.5.5 的引用仍然写入 machine.config。
    【解决方案2】:

    我不喜欢编辑 machine.config。只需将此重定向添加到 web.config:

    <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
          <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
          <bindingRedirect oldVersion="0.0.0.0-6.6.5.0" newVersion="6.7.4.0" />
        </dependentAssembly>
      </assemblyBinding>
    </runtime>
    

    【讨论】:

      【解决方案3】:

      使用它应该停止 Virtlink 提到的异常:

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

      特别注意&lt;remove name="MySQL Data Provider" /&gt; 这一行。

      【讨论】:

      • 请解释如何停止异常。
      • @rgettman 它在添加新的之前删除了 MySQL Data Provider 的现有配置,因此没有关于重复条目的投诉。
      • 在我的情况下,我必须用 &lt;remove invariant="MySql.Data.MySqlClient"/&gt; 替换 &lt;remove name="MySQL Data Provider" /&gt;
      【解决方案4】:

      HERE 下载 MYSQL 6.7.4.0。请注意,您的具体问题需要 6.7.4.0 而不是其他版本!

      直接链接是 this

      下载文件并将其添加到解决方案的参考文件夹中。

      这可能会解决你的问题(它对我有用,是的,我知道这可以解决一个非常烦人的问题)。

      祝你好运:)

      【讨论】:

        【解决方案5】:

        我意识到这个帖子早在 2013 年就有答案了,但我又遇到了这个问题。在我的情况下,我最近安装了 Windows 10 周年更新。在此之前没有问题。

        根据上面的答案,事实证明我的 Machine.config 文件已被覆盖(我认为是更新所致)。

        对我来说,一旦我将 MySql 程序集信息恢复到 Machine.config 文件,它立即又开始工作了。

        特别是“运行时”和“DbProviderFactories”部分已被清除,必须更换。它们如下(这些将根据您使用的程序集版本而有所不同):

        运行时部分:

        <runtime>
           <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
           <dependentAssembly xmlns="urn:schemas-microsoft-com:asm.v1">
               <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
               <bindingRedirect oldVersion="6.7.4.0" newVersion="6.9.9.0" />
           </dependentAssembly>
           <dependentAssembly xmlns="urn:schemas-microsoft-com:asm.v1">
               <assemblyIdentity name="MySql.Data.Entity" publicKeyToken="c5687fc88969c44d" culture="neutral" />
               <bindingRedirect oldVersion="6.7.4.0" newVersion="6.9.9.0" />
           </dependentAssembly>
           <dependentAssembly xmlns="urn:schemas-microsoft-com:asm.v1">
               <assemblyIdentity name="MySql.Web" publicKeyToken="c5687fc88969c44d" culture="neutral" />
               <bindingRedirect oldVersion="6.7.4.0" newVersion="6.9.9.0" />
           </dependentAssembly>
           </assemblyBinding>
        </runtime>
        

        DbProviderFactories 部分

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

        希望这可以帮助遇到同样问题的其他人。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-11-21
          • 2023-01-05
          • 1970-01-01
          • 1970-01-01
          • 2019-02-19
          • 1970-01-01
          • 2011-11-07
          • 2019-04-22
          相关资源
          最近更新 更多