2

我在本地机器上使用 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.

4

3 回答 3

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>
于 2013-01-15T15:26:48.193 回答
1

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

我的配置:
VS2012
.net 4.5
MVC4
Entity Framework 6(通过 nuget package restore 安装
npgsql - 2.0.13.91(通过 nuget package restore 安装

HACKY FIX:
通过从构建中删除它作为构建后事件(项目菜单->属性->构建事件->事件后命令行),您可以绕过错误(我不知道为什么不不适用于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中的构建活动的显示日志中查看。

关于从那个糟糕的 msbuild 打包例程(/output 目录和 /output/_PublishedWebsites)中对 dll 和配置的 2 组删除 - 恕我直言 - 如果你正在杀死东西,最好彻底,但它可能就足够了仅从 _publishedwebsites 中删除...

当它在AppHarbor中构建时,这会将其从目标部署中删除。您可能需要等待几分钟才能完成部署,但如果没有部署,则会解除对您的阻止。

于 2013-12-06T05:00:42.200 回答
0

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

我希望它有所帮助。

于 2013-01-15T12:29:29.860 回答