2010-03-23 91 views
6

我们如何修复?这个问题在互联网上被多次讨论过,但这总是一个解决方法。始终将MySql.data.dll复制到bin目录中,或者明确指出您想要的版本。在ASP.NET中使用DbProvderFactory for MySQL的“正确”方法是什么?“无法找到或加载已注册的.Net Framework数据提供程序”与MySQL + ASP.NET

我希望能够在本地开发,而不用担心他们在服务器上安装了哪些版本。现在,如果我复制自己的版本,我必须确保它是他们使用的版本。似乎容易打破。

+1

我使用'copy to bin directory'方法。我发现当版本不同时程序会中断(比如5.1.x和5.2.x)。 – 2011-02-08 18:03:24

回答

2

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

0

在这里,我是怎么得到的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和2.0点网

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

希望这可以帮助别人:)

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"); 
    } 

} 
1

另一个原因这个错误是在一个类似的螺纹 here注意到一个用户我有复制粘贴的用户回答以下的情况下,链接改变

我刚看到这个例外在我的情况的原因是DLL和日之间的differt版本e配置条目。 所以,有时你实际拥有的dll(或者通过nuget或者其他方式安装)不同于app.config节点中的条目。如果不在app.config中,也可以在Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ machine.config和附近的文件夹中找到 。 更改版本的入口版本的DLL解决了这个问题。

相关问题