我们怎么修这个?这个问题已经被排序的解决的多次围绕互联网,但它是始终是一个解决方法。总是复制的MySql.data.dll 到您站的目录,或明确说明什么样的版本你想要的。什么是"正确的"的方式来使用DbProvderFactory为MySQL ASP.NET?

我想要能够发展当地不用担心什么样的版本,他们已经安装在服务器上。因为它的立场,如果我做的复制了我自己我必须要确保它是一个,他们使用。似乎很容易打破。

有帮助吗?

解决方案

如果有问题的组件不在GAC,则它具有在路径中,即bin文件夹存在的。将在GAC中,大会要签名。我猜MySql.data.dll的建设者没有签署的DLL,所以你可能不能够把它放到服务器上的GAC。所以复制的dll是您的解决方案。

其他提示

另一个原因是这种错误被指出通过一个用户在一个类似的螺纹 在这里, 我有副本贴的用户回答以下情况下,链接的变化

我刚才看到的原因的这一例外在我的情况是differt版本之间的dll和配置项。因此,有时dll你实际上有(无论是通过安装nuget或其他方式)的不同而不同,从本项中的节点的程序。config。本部分,如果不在应用程序。配置,也可以找到下 Windows\Microsoft。净\Framework64\v4。0.30319\Config\机。config和附近的文件夹。改变版本的进入版本的dll解决的问题。

我在这里是如何得到MySQL的连接器连接到工作:

在下DbProviderFactories在machine.config添加folliwng:

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

*的注意的版本号和公钥将根据你已经安装了MySQL连接器的版本是不同的。这个例子是对于v6.7.4.0和v2.0点网

下副本%Program Files文件%\ MySQL的\ MySQL连接网络6.7.4 \组件\ 2.0 \ MySql.Data.dll 至 %的Windows \组件。

希望这有助于某人:)

通过而不的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");
    }

}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top