如何从DbProviderFactories中删除提供程序?

时间:2016-07-27 18:39:31

标签: c# .net npgsql dbproviderfactories

(配置:VS 2015社区,Windows 10 64位,.Net 4.6.1)

我安装了一次

  

PostgreSQL的Npgsql数据提供程序.Net数据提供程序Npgsql Npgsql.NpgsqlFactory,Npgsql,Version = 3.0.7.0,Culture = neutral,PublicKeyToken = 5d8b90d52f46fda7

使用

  

DbProviderFactories.GetFactoryClasses()。

我正在尝试删除它。

  • 我已从项目的App.config中删除了所有连接字符串和xml元素。

  • 来自

  

%SYSTEMROOT%\ Microsoft.NET \框架\ v4.0.30319 \ CONFIG \ machine.config中

  

%SYSTEMROOT%\ Microsoft.NET \ Framework64 \ v4.0.30319 \ CONFIG \ machine.config中

我删除了DbProviderFactories中的提供者声明

  

添加name =" Npgsql Data Provider"不变="&Npgsql的#34;支撑=" FF" description =" .Net框架数据提供程序用于Postgresql Server" type =" Npgsql.NpgsqlFactory,Npgsql"

  • 使用gacutil / u npgsql,我从GAC中删除了所有npgsql引用:
  

gacutil / l Npgsql   Microsoft(R).NET全局程序集缓存实用程序。版本4.0.30319.0   版权所有(c)Microsoft Corporation。保留所有权利。

     

全局程序集缓存包含以下程序集:

     

项数= 0

因此,在从machine.config,App.config和GAC中删除Npgsql提供程序之后,DbProviderFactories.GetFactoryClasses()仍会报告:

  

PostgreSQL的Npgsql数据提供程序.Net数据提供程序Npgsql Npgsql.NpgsqlFactory,Npgsql,Version = 3.0.7.0,Culture = neutral,PublicKeyToken = 5d8b90d52f46fda7

我还需要做些什么才能说服DbProviderFactories Npgsql不是提供商?

非常感谢你提供任何帮助。

编辑#1:我永远不能"删除" Npgsql提供程序,但使用.NET 4.5.2(而不是.NET 4.6.1)的目标框架进行重新编译确实解决了许多其他问题。

编辑#2:我需要回到这一点,但有趣的是,Visual Studio 2015社区在DbProvderFactories上有自己的配置

  

C:\ Program Files(x86)\ Microsoft Visual Studio   14.0 \ Common7 \ IDE \ devenv.exe.config

1 个答案:

答案 0 :(得分:0)

在一般意义上,我打赌从devenv.exe.config中删除它将完成删除。但是,在这种特定情况下,事实证明Npgsql开发团队已在以下位置安装了卸载程序:

  

C:\ Program Files(x86)\ Npgsql Development Team \ Npgsql

标记为uninstall.exe。

(我无法找到相关信息)。

延迟更新 在使用PetaPoco时,无法找到Npgsql提供程序,因为它被添加到GAC和machine.config文件中。查看devenv.exe.config,发现:

public interface CategoryRepository extends Repository<Category, Long> {
    public Category findById(Long id) throws DataAccessException;
    public Category save(Category category) throws DataAccessException;
}

指的是错误的Npgsql版本。从devenv.exe.config文件中删除它并重新启动Visual Studio允许PetaPoco从machine.confg和GAC中正确地找到Npgsql提供程序。