6

我们如何修复它?这个问题已经在互联网上多次解决,但它始终是一种解决方法。始终将 MySql.data.dll 复制到您的 bin 目录中,或明确说明您想要的版本。将 DbProvderFactory for MySQL 与 ASP.NET 一起使用的“正确”方法是什么?

我希望能够在本地开发,而不用担心他们在服务器上安装了什么版本。就目前而言,如果我确实复制了自己的版本,我必须确保它是他们使用的版本。好像很容易断。

4

4 回答 4

2

如果所讨论的程序集不在 GAC 中,则它必须存在于路径中,即 bin 文件夹中。在 GAC 中,程序集必须签署。我猜 MySql.data.dll 的构建者没有对 dll 进行签名,因此您可能无法将其放入服务器上的 GAC 中。因此,复制 dll 是您的解决方案。

于 2011-03-05T16:38:14.720 回答
1

此错误的另一个原因是用户在此处的类似线程上注意到我已复制粘贴下面的用户答案以防链接更改

我刚刚看到在我的案例中出现此异常的原因是 dll 和配置条目之间的不同版本。因此,有时您实际拥有的 dll(通过 nuget 或其他方式安装)与 app.config 节点中的条目不同。此部分(如果不在 app.config 中)也可以在 Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config 和附近的文件夹下找到。将条目中的版本更改为 dll 的版本解决了该问题。

于 2015-04-17T16:00:17.010 回答
0

另一种不带app.config的代码方式:(不要忘记在这段代码中设置正确的MySql.Data版本)

  public class MySqlDbConfiguration: DbConfiguration 
{
    public MySqlDbConfiguration()
    {
        SetDefaultConnectionFactory(new MySqlConnectionFactory());
        SetProviderServices(MySqlProviderInvariantName.ProviderName, new MySqlProviderServices());
        RegisterFactoryIfRequired();
    }

    private static void RegisterFactoryIfRequired()
    {
        string dataProvider = @"MySql.Data.MySqlClient";
        string dataProviderDescription = @".Net Framework Data Provider for MySQL";
        string dataProviderName = @"MySQL Data Provider";
        string dataProviderType =
            @"MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.8.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d";

        bool addProvider = true;
        var dataSet = ConfigurationManager.GetSection("system.data") as DataSet;
        foreach (DataRow row in dataSet.Tables[0].Rows)
        {
            if ((row["InvariantName"] as string) == dataProvider)
            {
                // it is already in the config, no need to add.
                addProvider = false;
                break;
            }
        }

        if (addProvider)
            dataSet.Tables[0].Rows.Add(dataProviderName, dataProviderDescription, dataProvider, dataProviderType);

        // test it
        var factory = DbProviderFactories.GetFactory("MySql.Data.MySqlClient");
    }

}
于 2014-02-14T19:42:24.103 回答
0

这是我如何让 MySQL 连接器工作的方法:

在 DbProviderFactories 下的 machine.config 中添加以下内容:

<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" />

*请注意,版本号和 PublicKeyToken 将根据您安装的 MySQL 连接器的版本而有所不同。此示例适用于 v6.7.4.0 和 v2.0 点网

接下来将 %Program Files%\MySQL\MySQL Connector Net 6.7.4\Assemblies\v2.0\MySql.Data.dll 复制到 %Windows\assembly。

希望这可以帮助某人:)

于 2013-07-05T09:33:48.237 回答