MySQLの+ ASP.NETでの「登録の.NET Frameworkデータプロバイダを見つけるか、ロードに失敗しました」
質問
どのように我々はこれを修復するのですか?この質問は、インターネットの周りに何回も対処の一種となっているが、それはいつもの回避策です。常にあなたのbinディレクトリにMySql.data.dllをコピー、または明示的に何をしたいバージョンを述べます。 ASP.NETでMySQL用のDbProvderFactoryを使用する「適切な」アプローチは何ですか?
私は、彼らがサーバー上にインストールされているどのバージョンローカルではなく心配を開発できるようにしたいと思います。現状では、私は私の独自のバージョンをコピーしない場合、私はそれは、彼らが使用するものです確認する必要があります。壊れやすいようです。
解決
は、それは、すなわち、binフォルダのパスに存在する必要がありません。 GACであることは、アセンブリが署名されなければなりません。私は、サーバー上のGACにそれを置くことができない場合がありので、DLLを署名しなかったMySql.data.dllのビルダーを推測しています。だから、DLLをコピーするソリューションです。
他のヒント
は、このエラーのためにもう一つの理由は、類似のスレッドは、ここで私は、ユーザーがリンクを
を変更する場合には、以下の答え貼り付けコピーしているをのI私の場合は、この例外の理由は、DLLおよび構成エントリ間differtバージョンがあったことだけ見ました。 だから、時には、あなたが実際に(どちらかnugetまたは他の方法でインストール)しているDLLのapp.configのノードのエントリから異なります。 App.configファイルで、また下に見つけることができない場合は、このセクションで、 Windowsの\ Microsoft.NET \ Framework64 \ v4.0.30319 \ CONFIG \ machine.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" />
* のバージョン番号をメモしてなPublicKeyTokenは、インストールされているMySQLのコネクタのバージョンによって異なります。この例ではv6.7.4.0およびv2.0のドットネットの
のためにあります次のコピー%プログラムファイル%\ MySQLの\ MySQLのコネクタネット6.7.4 \アセンブリ\ v2.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");
}
}