DbProviderFactories.GetFactoryClasses() 未检测到新版本的 MySql Connector

问题描述 投票:0回答:1

(我们使用.net框架4.8)

因此,在我们的代码中,这就是我们获取有关实现 DbProviderFactory 的所有已安装提供程序的信息的方式:

DbProviderFactories.GetFactoryClasses();

这适用于大多数连接器,并且适用于 MySql v8.0.25 连接器。但是当我升级到MySql 8.0.33时,它不再在表中列出了。

在网上查找时,人们建议将这些行添加到 app.config 中:

  <system.data>
    <DbProviderFactories >
      <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=8.0.33.1, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
</system.data>

但这并没有解决问题。此外,我尝试使用以下行显式检索 MySql 提供程序:

DbProviderFactory test = DbProviderFactories.GetFactory("MySql.Data.MySqlClient");

但这会抛出一个异常,表明连接器未安装,这显然是:

有人遇到过这种情况吗?我无法找到两个版本之间会导致这种行为变化的任何差异,并且我在网上找到的任何内容似乎都无法解决我的问题。预先感谢。

编辑:在尝试一些配置设置时,我得到了方法

DbProviderFactories.GetFactoryClasses();

要找到它,但是当我后来尝试像这样检索它时:

DbProviderFactories.GetFactory(dbProvider.InvariantName)

它抛出以下异常:

System.Configuration.ConfigurationErrorsException: 'Failed to find or load the registered .Net Framework Data Provider.'

我还尝试将 MySql.Data.dll 文件添加到 bin 文件夹中,以及在 GAC 中手动注册它,但没有解决问题

mysql-connector .net-4.8 dbproviderfactories
1个回答
0
投票

在网上查找时,人们建议将这些行添加到 app.config 中:[snip]

我从https://bugs.mysql.com/bug.php?id=113561获取了你的测试程序。

我使用 NuGet Package Manager 安装最新版本 (8.2.0) 的 MySql.Data。

然后我编辑

App.config
以包含以下内容:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
    </startup>
    <system.data>
        <DbProviderFactories>
            <remove  invariant="MySql.Data.MySqlClient" />
            <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=8.2.0.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
        </DbProviderFactories>
    </system.data>
</configuration>

当我运行程序时,它通过

MySqlClientFactory
DbProviderFactories.GetFactoryClasses
成功检索了
DbProviderFactories.GetFactory
的v8.2.0.0。

© www.soinside.com 2019 - 2024. All rights reserved.