&引用;未能找到或加载已注册的.Net Framework数据提供程序“;使用MySQL+;ASP.NET
我们如何修复这个?这个问题在互联网上已经被解决了很多次,但它始终是一个解决办法。始终将MySql.data.dll复制到bin目录中,或明确说明所需的版本。在ASP.NET中使用DbProvderFactory for MySQL的“正确”方法是什么&引用;未能找到或加载已注册的.Net Framework数据提供程序“;使用MySQL+;ASP.NET,asp.net,mysql,provider,Asp.net,Mysql,Provider,我们如何修复这个?这个问题在互联网上已经被解决了很多次,但它始终是一个解决办法。始终将MySql.data.dll复制到bin目录中,或明确说明所需的版本。在ASP.NET中使用DbProvderFactory for MySQL的“正确”方法是什么 我希望能够在本地开发,而不必担心服务器上安装了什么版本。目前,如果我真的复制了我自己的版本,我必须确保它是他们使用的版本。似乎很容易中断。如果所讨论的程序集不在GAC中,则它必须存在于路径中,即bin文件夹中。在GAC中,装配必须签字。我猜MySq
我希望能够在本地开发,而不必担心服务器上安装了什么版本。目前,如果我真的复制了我自己的版本,我必须确保它是他们使用的版本。似乎很容易中断。如果所讨论的程序集不在GAC中,则它必须存在于路径中,即bin文件夹中。在GAC中,装配必须签字。我猜MySql.data.dll的构建者没有对dll进行签名,因此您可能无法将其放入服务器上的GAC中。因此,复制dll是您的解决方案 下面是我如何让MySQL连接器工作的: 在dbProviderFactorys下的machine.config中添加以下选项:
<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 dot net
下一个副本%Program Files%\MySQL\MySQL Connector Net 6.7.4\Assemblys\v2.0\MySQL.Data.dll
到
%Windows\assembly
希望这对某人有所帮助:)不使用app.config的代码的另一种方式:(别忘了在此代码中设置正确的MySql.Data版本)
这个错误的另一个原因是一个用户在一个类似的线程上注意到的,我已经复制粘贴了下面的用户答案,以防链接更改 我刚刚看到,在我的例子中,这个异常的原因是dll和配置条目之间的版本不同。 因此,有时您实际拥有的dll(通过nuget或其他方式安装)与app.config节点中的条目不同。如果此部分不在app.config中,也可以在下找到 Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.Config和附近的文件夹。
将条目中的版本更改为dll的版本解决了此问题。我使用“复制到bin目录”方法。我发现当版本不同时(比如5.1.x和5.2.x),程序会崩溃。
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");
}
}