升级到最新版本的NHibernate,现在我的一些单元测试失败了,我使用的是SQLite InMemory库。这是我升级的内容
现在,以下代码编译但不再正常工作。
var cfg = Fluently.Configure()
.Database(SQLiteConfiguration.Standard.InMemory().ShowSql())
.BuildConfiguration();
cfg.BuildSessionFactory();
我每次都会收到以下错误。
SetUp:System.Data.SQLite.SQLiteException:回调例程请求中止 用户中止了执行
有没有其他人在升级过程中遇到过这种情况并找到解决办法?我的时间表相当紧张,所以任何帮助都会受到赞赏。
答案 0 :(得分:0)
在得到另一位开发人员对该问题的回复之后,他们问我使用的是什么版本的System.Data.SQLite DLL。事实证明我使用的是版本1.0.60.0。该引用恰好被硬编码为DLL的下载副本。我从项目中删除了引用,然后添加了安装版本1.0.98.1的Nuget包
<package id="System.Data.SQLite.Core" version="1.0.98.1" targetFramework="net45" />
安装此软件包然后重新编译后,单元测试从Visual Studio运行良好,但不使用Msbuild.exe命令行。这是连续构建服务器所必需的。直到我将参考模式从默认 CopyLocal = False 更改为 CopyLocal = True
之后才开始这将创建包含&#34; SQLite.Interop.Dll&#34;的子文件夹x86和x64。进行重建时需要这样做。这允许单元测试在我的机器上正常工作。对于Constant Integration(CI)服务器,我需要添加一个将这两个文件夹复制到输出文件夹的构建步骤。
<PreBuildEvent>xcopy $(SolutionDir)\packages\System.Data.SQLite.Core.1.0.98.1\build\net45\* $(TargetDir) /S /V /Y</PreBuildEvent>
这允许CI服务器将文件复制到输出文件夹以进行单元测试。
当我更新剩余的NHibernate解决方案时,我觉得愚蠢没有更新System.Data.SQLite.DLL,希望这个问题可以防止其他人犯同样的错误。