根据Akavache的平台特定说明:
.NET 4.5 桌面 (WPF) - 您必须将应用程序标记为 x86,否则您将收到关于 SQLitePCL_Raw 未正确加载的奇怪运行时错误。
现在,我只是尝试使用仿照 Akavache Github 页面上的示例代码建模的简单代码在LINQPad中测试 Akavache。
async void Main()
{
BlobCache.ApplicationName = "JonTestApp1";
var dt = DateTime.Now;
await BlobCache.UserAccount.InsertObject("Test1", dt);
var toaster = await BlobCache.UserAccount.GetObject<DateTime>("Test1");
toaster.Dump();
}
可以预见的是,它正在爆炸。
如何在 LINQPad 中将我的应用程序构建目标标记为 x86?使用 v. 4.53.16,而不是 AnyCPU 版本,只是普通的 beta。我在设置和谷歌中到处找,但找不到任何东西。
谢谢
* 更新 1 *
尝试@Joe Albahari 的建议。 IntPtr.Size
确实是4。这是我在第一await
行得到的例外:
System.TypeInitializationException: The type initializer for 'NativeMethods' threw an exception. ---> System.Exception: sqlite3.dll was not loaded.
at SQLitePCL.SQLite3Provider.NativeMethods..cctor()
--- End of inner exception stack trace ---
at SQLitePCL.SQLite3Provider.NativeMethods.sqlite3_open_v2(Byte[] filename, IntPtr& db, Int32 flags, Byte[] vfs)
at SQLitePCL.SQLite3Provider.SQLitePCL.ISQLite3Provider.sqlite3_open_v2(String filename, IntPtr& db, Int32 flags, String vfs)
at Akavache.Sqlite3.Internal.SQLiteConnection..ctor(String databasePath, SQLiteOpenFlags openFlags, Boolean storeDateTimeAsTicks)
at Akavache.Sqlite3.Internal.SQLiteConnection..ctor(String databasePath, Boolean storeDateTimeAsTicks)
at Akavache.Sqlite3.SQLitePersistentBlobCache..ctor(String databaseFile, IScheduler scheduler)
at Akavache.Sqlite3.Registrations.c__DisplayClass6.b__2()
at System.Lazy`1.CreateValue()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Lazy`1.get_Value()
at Akavache.Sqlite3.Registrations.c__DisplayClass6.b__3()
at Splat.ModernDependencyResolver.GetService(Type serviceType, String contract) in z:\code\paulcbetts\splat\Splat\ServiceLocation.cs:line 223
at Splat.DependencyResolverMixins.GetService[T](IDependencyResolver This, String contract) in z:\code\paulcbetts\splat\Splat\ServiceLocation.cs:line 138
at Akavache.BlobCache.get_UserAccount()
at UserQuery.d__0.MoveNext() in c:\Users\jcomtois\AppData\Local\Temp\LINQPad\_qizvxzkh\query_rjuuom.cs:line 45
由于我通过 LINQPad 的 NuGet 安装了 Akavache,因此我不得不进行一些搜索以找出 sqlite3.dll 的位置。我在 Akavache NuGet 包中(在我的 AppData/Local/LINQPad/Nuget... 中)发现了大约 15 个不同的 slqlite3.dll,用于各种构建。我尝试先将 x86 文件夹中的那个复制到 LINQPad 目录,但同样的错误。然后我尝试将其他每个 sqlite3.dll 复制到 LINQPad 文件夹,但结果仍然相同。
我无法在这台机器上安装 Visual Studio,所以我希望有办法让它与 LINQPad 一起工作。