使用SQLite和SQLProvider时ResolutionPath出现问题

4
尝试使用F# SQLProvider与SQLite,但一直收到错误消息:The type provider 'FSharp.Data.Sql.SqlTypeProvider' reported an error: Unable to load DLL 'SQLite.Interop.dll': The specified module could not be found. 代码:
open FSharp.Data.Sql

let [<Literal>] resolutionPath1 = 
    __SOURCE_DIRECTORY__ + @"..\..\packages\System.Data.SQLite.Core.1.0.102.0\build\net46\x86\" 
let [<Literal>] resolutionPath2 =
    @"f:\proj\WanLog\packages\System.Data.SQLite.Core.1.0.102.0\build\net46\x86"

let [<Literal>] connectionString = 
    "Data Source=" + @"F:\proj\WanLog\WanLog\bin\Debug\WanIPLog.s3db"

type sql = SqlDataProvider< 
              ConnectionString = connectionString,
              DatabaseVendor = Common.DatabaseProviderTypes.SQLITE,
              ResolutionPath = resolutionPath2,
              IndividualsAmount = 1000,
              UseOptionTypes = true >

我已尝试相对路径和绝对路径(resolutionPath1和resolutionPath2),并验证了SQLite.Interop.dll实际上存在于resolutionPath2引用的目录中。
目标框架和CPU(.NET 4.6和x86)与指定目录(以\net46\x86结尾)同步。我错过了什么?
更新:
根据此问题的答案,我已更新SQLProvider SQLite文档
更新2:
System.Data.SQLite在版本1.0.104.0中解决了此问题。请参见此讨论
1个回答

1
把你的分辨率路径改成以下路径,这样应该会有 SQLiteInterop.dllSystem.Data.SQLite.dll。如果没有,就复制这个文件:

packages\System.Data.SQLite.Core.1.0.102.0\lib\net46

如果需要,可以使用 File.Exists 进行检查。顺便问一下,您确定 x86 版本是正确的吗?我会为 x64 构建并复制 x64 dll 到那里。另外,我还会引用和打开 System.Data.SQLite


通常情况下,即使 Visual Studio 显示为 x64,它仍会在 x86 模式下运行。因此,请尝试使用 dll 的 x86 版本。 - Tuomas Hietanen
@TuomasHietanen 我不确定我是否理解了。实际上,Sqlite在位数方面非常挑剔。虽然VS在大多数现代平台上确实是32位应用程序,但最好针对64位进行目标设置。显然,如果您正在使用FSI,则还需要将其设置为64位。为什么不利用更大的地址空间,特别是对于数据库呢? - s952163
1
我进行了一些实验,显然,如果ResolutionPath指向一个包含System.Data.SQLite.dll的目录,并且具有带有SQLiteInterop.dllx64x86子目录,则也可以工作,从而允许您选择“Any CPU”目标。 - John Reynolds
1
我创建了一个拉取请求,更新SQLProvider SQLite文档,以包含所有这些信息。感谢SQLProvider维护者在星期天早上合并并重建文档页面。 :) - John Reynolds
1
关于此事的后续:很快就不再需要复制x64和x86本机子目录。Joe Mistachkin正在为我们F#用户修改System.Data.SQLite NuGet包。更新可能会在下一个版本1.0.104.0中发布。 - John Reynolds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接