MySQLの+ ASP.NETでの「登録の.NET Frameworkデータプロバイダを見つけるか、ロードに失敗しました」

StackOverflow https://stackoverflow.com/questions/2497302

  •  21-09-2019
  •  | 
  •  

質問

どのように我々はこれを修復するのですか?この質問は、インターネットの周りに何回も対処の一種となっているが、それはいつもの回避策です。常にあなたのbinディレクトリにMySql.data.dllをコピー、または明示的に何をしたいバージョンを述べます。 ASP.NETでMySQL用のDbProvderFactoryを使用する「適切な」アプローチは何ですか?

私は、彼らがサーバー上にインストールされているどのバージョンローカルではなく心配を開発できるようにしたいと思います。現状では、私は私の独自のバージョンをコピーしない場合、私はそれは、彼らが使用するものです確認する必要があります。壊れやすいようです。

役に立ちましたか?

解決

問題のアセンブリがGACにない場合は、

は、それは、すなわち、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");
    }

}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top