无法找到请求的Net Framework数据提供者

时间:2017-01-03 18:14:50

标签: c# postgresql windows-services provider

这是一个非常具体的错误消息,但我无法找到问题。

我有一个需要与数据库通信的Windows服务,为此我执行以下操作:

string provider = "Devart.Data.PostgreSql";
DbProviderFactory factory = DbProviderFactories.GetFactory(provider);

但它崩溃了,给我这个错误:

  

System.ArgumentException:无法找到请求的.Net Framework   数据提供者。它可能没有安装。在   System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName)

我尝试将Devart.Data.PostgreSql.dll移动到bin文件夹,但结果是一样的。

然后我检查了我的machine.config,我有这个:

<add name="dotConnect for PostgreSQL" 
     invariant="Devart.Data.PostgreSql"
     description="Devart dotConnect for PostgreSQL" 
     type="Devart.Data.PostgreSql.PgSqlProviderFactory, Devart.Data.PostgreSql, Version=7.4.506.0, Culture=neutral, PublicKeyToken=09af7300eec23701" />

所以它看起来正确,我没有找到任何空标签,发现在其他SO帖子中,说在空的时候删除那些标签可以解决问题,但我没有。

所以我不知道这是什么问题。

我还创建了一个控制台项目,它使用相同的.Net版本,并使用确切的代码:

string provider = "Devart.Data.PostgreSql";
DbProviderFactory factory = DbProviderFactories.GetFactory(provider);

它有效。有谁知道它会是什么?

1 个答案:

答案 0 :(得分:0)

我现在一直在使用DevArt库,虽然我没有遇到您的具体问题,但我可以告诉您部署的代码需要添加许可文件。

它应该被称为licenses.licx,如下所示:

Devart.Data.PostgreSql.PgSqlConnection, Devart.Data.PostgreSql

将其作为嵌入式资源添加到项目中。如果你添加它然后想“它去了哪里?” :即使您已添加它,它也不会显示在您的解决方案资源管理器中,除非您单击全部显示按钮。

您的配置文件中需要以下内容:

  <entityFramework>
    <providers>
      <provider invariantName="Devart.Data.PostgreSql" type="Devart.Data.PostgreSql.Entity.PgSqlEntityProviderServices,Devart.Data.PostgreSql.Entity.EF6, Version=7.6.743.0, Culture=neutral, PublicKeyToken=09af7300eec23701" />
    </providers>
  </entityFramework>

  <system.data>
    <DbProviderFactories>
      <remove invariant="Devart.Data.PostgreSql" />
      <add name="dotConnect for PostgreSQL" invariant="Devart.Data.PostgreSql" description="Devart dotConnect for PostgreSQL" type="Devart.Data.PostgreSql.PgSqlProviderFactory, Devart.Data.PostgreSql, Version=7.6.743.0, Culture=neutral, PublicKeyToken=09af7300eec23701" />
    </DbProviderFactories>
  </system.data>

如果您没有获得libs的版本号,那么它将不起作用,请检查。   右键单击Devart.Data.Postgresql.dll并选择“属性”,“详细信息”以获取正确的编号。

如果不起作用,请联系DevArt的技术支持。他们真的很有帮助,即使你只使用他们的libs的试用版。

HTH,

亚当。