« Impossible de trouver ou de charger le fournisseur de .Net Framework Les données enregistrées » avec MySQL + ASP.NET

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

  •  21-09-2019
  •  | 
  •  

Question

Comment pouvons-nous réparer cela? Cette question a été abordée en quelque sorte à plusieurs reprises autour de l'Internet, mais il est toujours une solution de contournement. Toujours copier le MySql.data.dll dans votre répertoire bin, ou en indiquant explicitement la version que vous voulez. Quelle est l'approche « correcte » à l'utilisation DbProvderFactory pour MySQL avec ASP.NET?

Je voudrais être en mesure de développer localement et ne vous inquiétez pas quelle version ils ont installé sur le serveur. En l'état actuel, si je fais copier ma propre version que je dois vous assurer qu'il est celui qu'ils utilisent. Il semble facile à briser.

Était-ce utile?

La solution

Si l'ensemble en question n'est pas dans le GAC, alors il ne doit exister dans le chemin, à savoir le dossier bin. Le soit dans le GAC, l'assemblée doit être signé. Je devine que les bâtisseurs de MySql.data.dll n'a pas signé la dll afin que vous ne pouvez pas être en mesure de le mettre dans le GAC sur le serveur. Donc, la copie du dll est votre solution.

Autres conseils

Une autre raison de cette erreur a été constatée par un utilisateur sur un fil similaire ici je copie collé les utilisateurs réponse ci-dessous au cas où les changements de lien

Je viens de voir que la raison de cette exception dans mon cas étaient les versions Differt entre dll et l'entrée de configuration. Alors, parfois le dll vous avez fait (soit installé par NuGet ou tout autre moyen) diffère de l'entrée dans le nœud du app.config. Cette section, sinon dans app.config, peut également être trouvé sous     Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ machine.config et dossiers à proximité. Version Changement dans l'entrée à la version de la dll a résolu la question.

Voici comment je suis arrivé le connecteur MySQL au travail:

Dans le machine.config sous DbProviderFactories ajouter le 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" />

* Notez le numéro de version et PublicKeyToken sera différente en fonction de la version du connecteur MySQL vous avez installé. Cet exemple est pour dot net v6.7.4.0 et v2.0

copie suivante% Program Files% \ MySQL \ MySQL Connector Net 6.7.4 \ Assemblies \ v2.0 \ MySql.Data.dll à % Windows \ assemblage.

Hope this helps quelqu'un:)

Une autre façon par le code sans app.config: (ne pas oublier de mettre la bonne version de MySql.Data dans ce code)

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

}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top