在Windows 10上进行Sqlite-net挂起调用

时间:2015-08-11 17:13:06

标签: c# visual-studio-2012 sqlite windows-10 sqlite-net

所以我一直致力于一个桌面应用程序,它利用SQLite存储一些每个执行数据。我们在C#,.NET 4.5,Visual Studio 2012中工作,使用以下nuget包来支持SQLite需求:

  • 源码网
  • System.Data.SQLite(x86 / x64)
  • System.Data.SQLite Core(x86 / x64)
  • System.Data.SQLite EF6
  • System.Data.SQLite LINQ

这些软件包将两个文件: SQLite.cs SQLiteAsync.cs 安装到项目托管代码中。但是我们需要去寻找 sqlite3.dll 以支持这些文件对非托管代码的调用。此文件包含在项目的根级别,并在构建时复制到bin。

现在,我们开始在Windows 8.1上开发,并且能够成功使用SQLite来创建/更新.sqlite数据库文件。然后切换到Windows 10(它是免费的,这是现在支持的最重要的平台),现在任何对非托管代码的调用(sqlite3.dll) HANGS 。挂是最糟糕的,没有例外,没有线索,非托管代码=没有调试。我可以得到一个阿门吗?

挂起发生在SQLite3.Open,这是调用堆栈(我不得不拼凑起来,我讨厌挂起......)

**HANGS AT THIS CALL: SQLite3.Open**
var r = SQLite3.Open(databasePathAsBytes, out handle, (int) openFlags, IntPtr.Zero) in SQLite.cs 
: base(SQLiteConnectionString.DatabasePath, SQLIteOpenFlags, SQLiteConnectionString.StoreDateTimeAsTicks) in SQLite.cs
Connection = new SQLiteConnectionWithLock(SQLiteConnectionString, SQLIteOpenFlags) in SQLiteAsync.cs
entry = new Entry(SQLiteConnectionString, SQLIteOpenFlags) in SQLiteAsync.cs 
return SQLiteConnectionPool.Shared.GetConnection(SQLiteConnectionString, SQLIteOpenFlags) in SQLiteAsync.cs 
var conn = this.GetConnection() in SQLiteAsync.cs (their code)
Task initTask = db.RunInTransactionAsync(...) in SQLFacade.cs (our code)

我希望这不难读。

无论如何,我希望那里的某些人能够深入了解为什么会突然发生这种情况。我已经尝试重新安装所有的nuget包并获取最新的sqlite3.dll无济于事。与此同时,我将检查Windows Defender和Bitdefender(我选择的防病毒软件),看看他们是否因某种原因阻止访问sqlite3.dll。

如果有人与SQLite团队的成员联系,请在这篇文章中提及他们,这个障碍是我们团队进展的一个巨大障碍。

非常感谢!

1 个答案:

答案 0 :(得分:3)

BIG,BIG SIGH

我在错误的构建配置上。我们正在构建一个64位应用程序,不知何故,我的项目构建配置是全面的x86。 sqlite3.dll是一个64位的库。如果是相反的方式我会看到BadImageFormatException,在这种情况下,我有一个挂起。

程序员的生活啊。

我希望这篇文章有助于某些人,否则它将永远存在于我的耻辱之墙上。