Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;未能找到或加载已注册的.Net Framework数据提供程序“;使用MySQL+;ASP.NET_Asp.net_Mysql_Provider - Fatal编程技术网

&引用;未能找到或加载已注册的.Net Framework数据提供程序“;使用MySQL+;ASP.NET

&引用;未能找到或加载已注册的.Net Framework数据提供程序“;使用MySQL+;ASP.NET,asp.net,mysql,provider,Asp.net,Mysql,Provider,我们如何修复这个?这个问题在互联网上已经被解决了很多次,但它始终是一个解决办法。始终将MySql.data.dll复制到bin目录中,或明确说明所需的版本。在ASP.NET中使用DbProvderFactory for MySQL的“正确”方法是什么 我希望能够在本地开发,而不必担心服务器上安装了什么版本。目前,如果我真的复制了我自己的版本,我必须确保它是他们使用的版本。似乎很容易中断。如果所讨论的程序集不在GAC中,则它必须存在于路径中,即bin文件夹中。在GAC中,装配必须签字。我猜MySq

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


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

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

下面是我如何让MySQL连接器工作的:

在dbProviderFactorys下的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 dot net

下一个副本%Program Files%\MySQL\MySQL Connector Net 6.7.4\Assemblys\v2.0\MySQL.Data.dll 到 %Windows\assembly


希望这对某人有所帮助:)

不使用app.config的代码的另一种方式:(别忘了在此代码中设置正确的MySql.Data版本)


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

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

我使用“复制到bin目录”方法。我发现当版本不同时(比如5.1.x和5.2.x),程序会崩溃。
  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");
    }

}