gpt4 book ai didi

.net - 如何在 LINQPad 中使用 Akavache?

转载 作者:行者123 更新时间:2023-12-04 16:19:27 25 4
gpt4 key购买 nike

根据 Akavache 的平台特定说明:

.NET 4.5 Desktop (WPF) - You must mark your application as x86, or else you will get a strange runtime error about SQLitePCL_Raw not loading correctly.



现在我只是想在 LINQPad 中测试 Akavache使用以 Akavache Github 页面上的示例代码为模型的简单代码。
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 to x86 中标记我的应用程序构建目标?使用 v. 4.53.16,不是 AnyCPU 版本,只是普通的测试版。我在设置和谷歌中到处找,但找不到任何东西。

谢谢

* 更新 1 *

尝试@Joe Albahari 的建议。 IntPtr.Size确实是 4。这是我在第一个 await 上遇到的异常(exception)情况。线:

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 一起使用。

最佳答案

在基本上永远对此感到沮丧之后,我梳理了 sqlite3_raw 依赖项并发现了这一点:

private static bool TryLoadFromDirectory(string dllName, string baseDirectory)
{
/* snip */

var architecture = IntPtr.Size == 4 ? "x86" : "x64";
var dllPath = System.IO.Path.Combine(baseDirectory, architecture, dllName);
if (!System.IO.File.Exists(dllPath))
{
return false;
}

/* snip - loads the dll */
}

一旦我将 sqlite3.dll 移动到“{linqpad}\x86\sqlite3.dll”,它就可以正常工作了。

关于.net - 如何在 LINQPad 中使用 Akavache?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28308795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com