“Impossibile trovare o caricare la raccomandata .Net Framework Provider di Dati con MySQL + ASP.NET

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

  •  21-09-2019
  •  | 
  •  

Domanda

Come possiamo fare per riparare questo?Questa domanda è stata una specie di rivolta molte volte in giro per internet, ma è sempre una soluzione.Sempre a copiare il MySql.data.dll nella directory bin, in modo esplicito, affermando che la versione che si desidera.Qual è il "giusto" approccio all'utilizzo di DbProvderFactory per MySQL con ASP.NET?

Mi piacerebbe essere in grado di sviluppare a livello locale e non preoccuparsi di ciò che la versione che hai installato sul server.Così com'è, se faccio copia la mia versione che ho per assicurarsi che è quello che usano.Sembra facile da rompere.

È stato utile?

Soluzione

Se il gruppo in questione non è nel GAC, poi lo fa deve esistere nel percorso, vale a dire la cartella bin. L'essere nel GAC, l'assemblea deve essere firmato. Sto indovinando i costruttori della MySql.data.dll non ha firmato la dll in modo da non essere in grado di metterlo in GAC sul server. Quindi copiare la dll è la vostra soluzione.

Altri suggerimenti

Un altro motivo per questo errore è stato rilevato da un utente su un thread simile qui ho copia incollato gli utenti risposta qui sotto nel caso in cui le modifiche di collegamento

Ho appena visto che il motivo di questa eccezione nel mio caso erano le versioni Differt tra DLL e la voce di configurazione. Così, a volte la dll che effettivamente hanno (o installato da NuGet o altro modo) si differenzia dalla voce nel nodo del app.config. In questa sezione, se non in app.config, si possono trovare anche sotto     Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ machine.config e le cartelle nelle vicinanze. Modifica versione nella voce alla versione del dll ha risolto il problema.

Ecco come ho ottenuto il MySQL connector di lavoro:

Nella macchina.config sotto DbProviderFactories aggiungere il 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" />

*Nota il numero di versione e PublicKeyToken sarà diverso a seconda della versione di MySQL connector installato.Questo esempio è per il v6.7.4.0 e v2.0 dot net

Accanto copiare %Program Files%\MySQL\MySQL Connector Net 6.7.4\Assemblies\v2.0\MySql.Data.dll per %Windows\assembly.

Spero che questo aiuta qualcuno :)

Un altro modo attraverso il codice senza app.config: (non dimenticate di impostare la versione MySql.Data proprio in questo codice)

  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");
    }

}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top