本帖最后由 QWERTYU 于 2020-11-11 09:14 编辑
情景:
使用mysql数据库开.net项目,本地开发环境安装了.NET MySQL连接器,一切运行正常,但是发布到iis,程序异常,报错信息如下:
异常信息:
System.Data.Entity.Infrastructure.DependencyResolution.DefaultProviderFactoryResolver.<GetService>b__0--->异常信息:具有固定名称“MySql.Data.MySqlClient”的 ADO.NET 提供程序未在计算机或应用程序配置文件中注册或无法加载。有关详细信息,请参阅内部异常。
InnerException:System.ArgumentException: 找不到请求的 .Net Framework Data Provider。可能没有安装。
查找问题:
发现服务器没有安装.NET MySQL连接器,因为mysql使用的是阿里云的云数据库,服务器也有多台,为了避免在每台服务器上安装.NET MySQL连接器,为此,我确保将MySQL引用设置为“本地复制”,以便将它们复制到bin文件夹,并将以下内容添加到我的app.config中:
添加以上配置后,服务器上可以正常工作,并且无需在服务器上安装MySQL连接器即可部署应用程序,但是现在我的本地开发机(已安装了MySQL连接器)上出现了问题,当我尝试EF时遇到此错误连接: 异常信息: System.Data.Entity.Infrastructure.DependencyResolution.DefaultProviderFactoryResolver.<GetService>b__0--->异常信息:具有固定名称“MySql.Data.MySqlClient”的 ADO.NET 提供程序未在计算机或应用程序配置文件中注册或无法加载。有关详细信息,请参阅内部异常。 InnerException:System.ArgumentException: 找不到请求的 .Net Framework Data Provider。可能没有安装。 尝试操作: 如果我注释掉上面在config中添加的XML,该错误就会消失。这可能是因为同一驱动程序已安装在系统上并且位于machine.config中。 最终解决方案及原因:
尝试在您的webconfig中添加<remove invariant =“ MySql.Data.MySqlClient” />。在您的计算机上,您已经安装了MySql连接器,并且通过在DbProviderFactories中添加一项来修改您的machine.config。因此,如果您在web.config中放入另一个MySql数据提供程序,就好像您尝试两次注册相同的东西一样。
|