4

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

有一次我安装了

用于 PostgreSQL 的 Npgsql 数据提供程序 Npgsql Npgsql.NpgsqlFactory,Npgsql,版本=3.0.7.0,Culture=neutral,PublicKeyToken=5d8b90d52f46fda7 的 Npgsql 数据提供程序

被使用

DbProviderFactories.GetFactoryClasses()。

我现在正在尝试删除它。

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

  • 从两者

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\CONFIG\machine.config

%SystemRoot%\Microsoft.NET\Framework64\v4.0.30319\CONFIG\machine.config

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

添加 name="Npgsql 数据提供程序" 不变="Npgsql" support="FF" 描述=".Net Framework Data Provider for 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 数据提供程序 Npgsql Npgsql.NpgsqlFactory,Npgsql,版本=3.0.7.0,Culture=neutral,PublicKeyToken=5d8b90d52f46fda7 的 Npgsql 数据提供程序

我还需要做什么来说服 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

4

1 回答 1

0

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

C:\Program Files (x86)\Npgsql 开发团队\Npgsql

标记为uninstall.exe。

(我找不到这方面的信息)。

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

<remove invariant="Npgsql" />
  <add name="Npgsql Data Provider" invariant="Npgsql" description=".Net Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql, Version=3.0.7.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" />

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

于 2016-07-31T02:30:38.687 回答