所以我一直致力于一个桌面应用程序,它利用SQLite存储一些每个执行数据。我们在C#,.NET 4.5,Visual Studio 2012中工作,使用以下nuget包来支持SQLite需求:
这些软件包将两个文件: 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团队的成员联系,请在这篇文章中提及他们,这个障碍是我们团队进展的一个巨大障碍。
非常感谢!
答案 0 :(得分:3)
BIG,BIG SIGH
我在错误的构建配置上。我们正在构建一个64位应用程序,不知何故,我的项目构建配置是全面的x86。 sqlite3.dll是一个64位的库。如果是相反的方式我会看到BadImageFormatException,在这种情况下,我有一个挂起。
程序员的生活啊。
我希望这篇文章有助于某些人,否则它将永远存在于我的耻辱之墙上。