“No se pudo encontrar o cargar el domicilio Proveedor de datos de .NET Framework” con MySQL + ASP.NET

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

  •  21-09-2019
  •  | 
  •  

Pregunta

¿Cómo podemos reparar este? Esta cuestión ha sido una especie de tratado muchas veces alrededor de la Internet, pero siempre es una solución. copiar siempre el MySql.Data.dll en el directorio bin, o indicando explícitamente qué versión que desee. ¿Cuál es el enfoque de "adecuada" para el uso de DbProvderFactory para MySQL con ASP.NET?

Me gustaría ser capaz de desarrollar localmente y no preocuparse de qué versión se han instalado en el servidor. Tal como está, si lo hago copiar hasta mi propia versión tengo que asegurarse de que es la que utilizan. Parece fácil de romper.

¿Fue útil?

Solución

Si el conjunto en cuestión no se encuentra en la GAC, entonces tiene que existir en el camino, es decir, la carpeta bin. El estar en el GAC, el conjunto tiene que ser firmado. Supongo que los constructores de las MySql.Data.dll no firmó el DLL por lo que puede no ser capaz de ponerlo en el GAC en el servidor. Así copiar el archivo DLL es su solución.

Otros consejos

Otra razón para este error se observó por un usuario en un hilo similares aquí he copia pegada a los usuarios respondan a continuación en caso de que el enlace cambia

acabo de ver que la razón de esta excepción en mi caso fueron las versiones differt entre DLL y la entrada de configuración. Por lo tanto, a veces la DLL que realmente tiene (ya sea instalado por Nuget o de otra manera) se diferencia de la entrada en el nodo del app.config. En esta sección, si no en app.config, también se puede encontrar en     Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ machine.config y cerca de carpetas. Cambio de versión en la entrada a la versión de la DLL resuelto el problema.

A continuación, cómo llegué el conector de MySQL para el trabajo:

En el machine.config bajo DbProviderFactories añadir el 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" />

* Tenga en cuenta el número de versión y PublicKeyToken será diferente dependiendo de la versión del conector de MySQL que haya instalado. Este ejemplo es para v6.7.4.0 y v2.0 Dot Net

A continuación copiar% Archivos de programa% \ MySQL \ MySQL Connector Net 6.7.4 \ Assemblies \ v2.0 \ MySql.Data.dll a % Windows \ montaje.

Espero que esto ayude a alguien:)

Otra forma a través de código sin app.config: (no se olvide de establecer la versión MySql.Data justo en este código)

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

}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top