我們如何修復?這個問題在互聯網上被多次討論過,但這總是一個解決方法。始終將MySql.data.dll複製到bin目錄中,或者明確指出您想要的版本。在ASP.NET中使用DbProvderFactory for MySQL的「正確」方法是什麼?「無法找到或加載已註冊的.Net Framework數據提供程序」與MySQL + ASP.NET
我希望能夠在本地開發,而不用擔心他們在服務器上安裝了哪些版本。現在,如果我複製自己的版本,我必須確保它是他們使用的版本。似乎容易打破。
我們如何修復?這個問題在互聯網上被多次討論過,但這總是一個解決方法。始終將MySql.data.dll複製到bin目錄中,或者明確指出您想要的版本。在ASP.NET中使用DbProvderFactory for MySQL的「正確」方法是什麼?「無法找到或加載已註冊的.Net Framework數據提供程序」與MySQL + ASP.NET
我希望能夠在本地開發,而不用擔心他們在服務器上安裝了哪些版本。現在,如果我複製自己的版本,我必須確保它是他們使用的版本。似乎容易打破。
如果有問題的程序集不在GAC中,則它必須存在於路徑中,即bin文件夾中。在GAC中,組件必須簽署。我猜測MySql.data.dll的構建者沒有簽名dll,因此您可能無法將其放入服務器上的GAC。所以複製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和2.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");
}
}
另一個原因這個錯誤是在一個類似的螺紋 here注意到一個用戶我有複製粘貼的用戶回答以下的情況下,鏈接改變
我剛看到這個例外在我的情況的原因是DLL和日之間的differt版本e配置條目。 所以,有時你實際擁有的dll(或者通過nuget或者其他方式安裝)不同於app.config節點中的條目。如果不在app.config中,也可以在Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ machine.config和附近的文件夾中找到 。 更改版本的入口版本的DLL解決了這個問題。
我使用'copy to bin directory'方法。我發現當版本不同時程序會中斷(比如5.1.x和5.2.x)。 – 2011-02-08 18:03:24