2010-03-23 78 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解決了這個問題。

相關問題