8

我下载了MySQL Connector/Net 6.7.4MySQL for Visual Studio 1.0.2,然后按照以下说明进行测试:

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

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

ConfigurationErrorsException:无法找到或加载注册的 .Net Framework 数据提供程序。

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

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

注意版本号,它不是我安装的 MySQL 连接器的版本。

如何让它正常工作?

4

5 回答 5

14

解决这个问题的诀窍是:

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

对于第二步,请注意有多个machine.config文件,每个框架版本(3.0、3.5、4.0)和架构(32 位、64 位)一个。另请注意,machine.config.NET 4.5 的文件位于 .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 并将app.config其添加到文件中时,您将收到此异常:

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

于 2013-09-18T20:57:21.073 回答
6

我不喜欢编辑 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>
于 2013-11-11T04:39:25.397 回答
5

使用它应该停止 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>

特别注意这一<remove name="MySQL Data Provider" />行。

于 2013-10-23T18:26:40.130 回答
1

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

直接链接就是这个

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

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

祝你好运 :)

于 2014-04-18T07:04:52.440 回答
0

我意识到这个线程早在 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>

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

于 2016-09-30T23:42:34.870 回答