„Fehler finden oder die registrierte .Net Framework Data Provider laden“ mit MySQL + ASP.NET

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

  •  21-09-2019
  •  | 
  •  

Frage

Wie reparieren wir das? Diese Frage wurde Art oft um das Internet angesprochen, aber es ist immer eine Abhilfe. Immer Kopieren der MySql.Data.dll in Ihrem bin-Verzeichnis oder explizit sagen, was Version Sie wollen. Was ist der „richtige“ Ansatz DbProvderFactory für MySQL mit ASP.NET zu verwenden?

Ich möchte in der Lage sein, lokal und nicht Sorge zu entwickeln, welche Version sie auf dem Server installiert haben. Wie es aussieht, wenn ich, dass ich meine eigene Version tun kopieren, müssen sicherstellen, dass es derjenige ist, die sie verwenden. Scheint einfach zu brechen.

War es hilfreich?

Lösung

Wenn die Baugruppe in Frage nicht im GAC ist, dann muss es auf dem Weg existieren, das heißt den Ordner ist. Das wäre im GAC hat die Anordnung unterzeichnet werden. Ich vermute, die die Erbauer von MySql.Data.dll nicht die DLL nicht unterzeichnet, so dass Sie nicht in der Lage sein, kann es in den GAC auf dem Server zu setzen. So die dll Kopieren ist Ihre Lösung.

Andere Tipps

Ein weiterer Grund für diesen Fehler wurde von einem Benutzer auf einem ähnlichen Thread bemerkt hier ich habe Kopie eingefügt die Benutzer beantworten unten, falls der Link ändert

Ich habe gerade gesehen, dass der Grund für diese Ausnahme in meinem Fall die differt Versionen zwischen dll und dem Konfigurationseintrag waren. Also, manchmal die dll Sie haben tatsächlich (entweder installiert von nuget oder andere Art und Weise) unterscheidet sich von dem Eintrag in dem Knoten des app.config. In diesem Abschnitt, wenn nicht in app.config, kann auch zu finden unter     Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ machine.config und in der Nähe Ordner. Ändern Version in dem Eintrag auf der Version der DLL löste das Problem.

Hier, wie ich die MySQL-Stecker an der Arbeit:

In der machine.config unter DbProviderFactories fügen Sie den 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" />

* Hinweis: die Versionsnummer und PublicKeyToken wird anders sein, abhängig von der Version des MySQL-Anschluss Sie installiert haben. Dieses Beispiel ist für v6.7.4.0 und v2.0 dot net

Als nächstes kopieren% Programfiles% \ MySQL \ MySQL Connector Net 6.7.4 \ Assemblies \ v2.0 \ MySql.Data.dll zu % Unter Windows \ assembly.

Hope, das hilft jemand:)

Eine andere Möglichkeit, durch den Code ohne app.config: (vergessen Sie nicht die richtige Version MySql.Data in diesem Code festgelegt)

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

}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top