我应该如何在Appharbor中使用Npgsql?

时间:2013-01-14 20:44:28

标签: c# nhibernate appharbor npgsql

我在本地计算机上使用SQLite开发了一个快速而简单的应用程序。现在我正在研究如何上传到AppHarbor,我有点卡住了使用ElephantSQL的链接工作。

我使用Application PostgreSQL Sample Application来确定我需要将PostgreSQLConfiguration类用于我的FluentNHibernate配置,并将Npgsql包安装到我的解决方案中(我得到了2.0.12.1版)。

当我将代码推送到AppHarbor时,它可以快速构建和部署。当服务器开始启动AppDomain时,它会抛出错误Could not load file or assembly 'policy.2.0.Npgsql' or one of its dependencies. Modules which are not in the manifest were streamed in. (Exception from HRESULT: 0x80131043)。这不会记录在AppHarbor仪表板的错误部分中(可能这是一个缺失的功能或错误?)所以我不得不关闭CustomErrors来弄清楚发生了什么。

我错过了什么?

其他 - 我尝试降级到包2.0.11版。这不包括policy.2.0.Npgsql.dll文件,当尝试加载应用程序时,它失败并显示错误Unable to find the requested .Net Framework Data Provider. It may not be installed.

3 个答案:

答案 0 :(得分:2)

我通过下载到2.0.11版本并确保DbProviderFactories配置部分在type属性中具有正确的版本号。

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

答案 1 :(得分:1)

我在 AppHarbor 上运行了npgsql 2.0.13 beta(2013年12月),并且在这个问题上有一段时间了,直到我发现如果你运行的是最新版本,它就不需要了程序集并且不关心bindingRedirects - 它是由.net AL.exe /程序集链接器工具生成的dll,用于汇总policy.2.0.Npgsql.config文件的内容(请查看https://github.com/npgsql/Npgsql/blob/master/src/policyFileBuild.bat以查看如何那是编译的)。

我的配置:
VS2012
.net 4.5
MVC4
实体框架6(通过nuget包恢复安装
npgsql - 2.0.13.91(通过nuget包恢复安装

HACKY FIX:
通过从构建中删除它作为后期构建事件(项目菜单 - &gt;属性 - &gt;构建事件 - &gt;事件后命令行),您可以绕过错误(我不知道为什么没有'在 AppHarbor 上工作。

所以加上这个废话:

del $(TargetDir)policy.2.0.Npgsql.dll /F
del $(TargetDir)policy.2.0.Npgsql.config /F
dir $(TargetDir)

del $(TargetDir)_PublishedWebsites\<appname/>\bin\policy.2.0.Npgsql.dll
del $(TargetDir)_PublishedWebsites\<appname/>\bin\policy.2.0.Npgsql.config
dir $(TargetDir)_PublishedWebsites\<appname/>\bin\

这可能是过度杀戮,但请注意 dir dos命令语句会为您提供有关目录内容的反馈,以确保文件实际已被删除。这可以从 AppHarbor 中的构建活动的显示日志中查看。

关于dll上的2组删除和来自那个上帝糟糕的msbuild打包例程(/ output目录和/ output / _PublishedWebsites)的配置 - 恕我直言 - 如果你要杀死东西,最好是彻底的,但它可能是仅仅从_publishedwebsites ...

中删除就足够了

当它在 AppHarbor 中构建时,这将从目标部署中删除它。您可能需要等待几分钟才能完成部署,但是部署时不会阻止您。

答案 2 :(得分:0)

我认为这个nuget包缺少policy.2.0.Npgsql.dll文件。你可以从官方nuget Npgsql包安装2.0.12版本的软件包吗?它有丢失的文件。

我希望它有所帮助。