现在我只是想在LINQPad中使用简单的代码测试Akavache,该代码是根据Akavache Github页面上的示例代码建模的。.NET 4.5桌面(WPF)-您必须将应用程序标记为x86,否则您将收到有关SQLitePCL_Raw未正确加载的奇怪运行时错误。
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包中找到了大约15个不同版本的slqlite3.dll(在我的AppData/Local/LINQPad/Nuget...文件夹中),供各种构建使用。我先尝试将x86文件夹中的一个复制到LINQPad目录中,但出现了相同的错误。然后我尝试将每个其他版本的sqlite3.dll复制到LINQPad文件夹中,但仍然出现相同的结果。
由于无法在这台机器上安装Visual Studio,因此我希望有一种方法可以使它与LINQPad一起使用。