6

これをどのように修復しますか?この質問はインターネット上で何度も取り上げられてきましたが、常に回避策です。常にMySql.data.dllをbinディレクトリにコピーするか、必要なバージョンを明示的に指定します。ASP.NETでMySQL用のDbProvderFactoryを使用するための「適切な」アプローチは何ですか?

ローカルで開発でき、サーバーにインストールされているバージョンを気にしないでください。現状では、自分のバージョンをコピーする場合は、それが使用されているものであることを確認する必要があります。壊れやすいようです。

4

4 に答える 4

2

問題のアセンブリがGACにない場合は、パス、つまりbinフォルダーに存在する必要があります。GACに参加している場合は、アセンブリに署名する必要があります。MySql.data.dllのビルダーがdllに署名しなかったため、サーバーのGACに配置できない可能性があります。したがって、dllをコピーすることが解決策です。

于 2011-03-05T16:38:14.720 に答える
1

このエラーの別の理由は、リンクが変更された場合に備えて、以下のユーザーの回答をコピーして貼り付けた、同様のスレッドのユーザーによって指摘されました。

私の場合、この例外の理由はdllと構成エントリのバージョンが異なることであることがわかりました。そのため、実際に持っているdll(nugetまたはその他の方法でインストールされたもの)が、app.configのノードのエントリと異なる場合があります。このセクションは、app.configにない場合は、Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config\machine.configおよび近くのフォルダーにもあります。エントリのバージョンをdllのバージョンに変更すると、問題が解決しました。

于 2015-04-17T16:00:17.010 に答える
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" />

*バージョン番号とPublicKeyTokenは、インストールしたMySQLコネクタのバージョンによって異なることに注意してください。この例は、v6.7.4.0およびv2.0ドットネット用です。

次に、%Program Files%\ MySQL \ MySQL Connector Net 6.7.4 \ Assembly \ v2.0 \ MySql.Data.dllを%Windows\assemblyにコピーします。

これが誰かに役立つことを願っています:)

于 2013-07-05T09:33:48.237 に答える
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");
    }

}
于 2014-02-14T19:42:24.103 に答える