这是一个非常具体的错误消息,但我无法找到问题。
我有一个需要与数据库通信的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);
它有效。有谁知道它会是什么?
答案 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,
亚当。