我应该如何在apphor中使用Npgsql

本文关键字:Npgsql apphor 我应该 | 更新日期: 2023-09-27 17:52:55

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

我使用应用程序PostgreSQL样本应用程序来确定我需要为我的FluentNHibernate配置使用PostgreSQLConfiguration类,并将Npgsql包安装到我的解决方案(我的版本为2.0.12.1)。

当我将代码推送到apphor时,它可以顺利地构建和部署。当服务器启动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. .

我应该如何在apphor中使用Npgsql

我将其运行到版本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>

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


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

:
通过将其从构建中删除作为构建后事件(项目菜单->属性->构建事件-> post事件命令行),您可以绕过错误(我不知道为什么在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命令语句会给您关于目录内容的反馈,以确保文件实际上已经被删除。这可以从 apphor 中的构建活动的显示日志中查看。

关于从那个可怕的msbuild打包例程(/output目录和/output/_publishhedwebsites)中删除dll和配置上的两组内容,我认为,如果你要删除东西,最好是彻底的,但可能仅仅从_publishhedwebsites中删除就足够了…

当它被构建在 apphor 中时,这将把它从目标部署中删除。您可能需要等待几分钟才能完成部署,但它不在部署中会解除您的障碍。

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