SQLite无法从F#FSI

时间:2016-02-29 19:02:15

标签: sqlite f# f#-interactive

即使引用fs项目中的模块,所有SQLite .NET包都不能在FSI中工作。我尝试过System.Data.SQLite,SQLitePCL.rawMicrosoft.Data.Sqlite

来自System.Data.SQLite docs

  

如果启动进程的可执行文件完全由托管代码组成,它将使用本机的本机处理器体系结构运行,该体系结构将是x64计算机上的x64。稍后,这将导致包含为x86编译的任何本机代码的程序集(例如“System.Data.SQLite.dll”混合模式程序集,“SQLite.Interop.dll”本机互操作程序集或“sqlite3.dll”)本机库)无法加载,通常会导致抛出BadImageFormatException。

抛出的错误通常类似于

System.DllNotFoundException: Unable to load DLL 'sqlite3': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
   at Microsoft.Data.Sqlite.Interop.NativeMethods.sqlite3_open_v2(IntPtr filename, Sqlite3Handle& ppDb, Int32 flags, IntPtr vfs)
   at Microsoft.Data.Sqlite.Interop.NativeMethods.sqlite3_open_v2(String filename, Sqlite3Handle& ppDb, Int32 flags, String vfs)
   at Microsoft.Data.Sqlite.SqliteConnection.Open()
   at <StartupCode$FSI_0009>.$FSI_0009.main@() in E:\BitSync\NonGitProjects\SQLiteSandbox\Microsoft.DataSandbox\Scripts\Script1.fsx:line 7

Demo gist

有没有人找到解决方案? SQLite在编译的F#程序和调试模式下运行良好。

1 个答案:

答案 0 :(得分:3)

artice Loading Native DLLs in F# Interactive具有解决加载原生DLLS问题的正确技巧。

在我的情况下,我成功地尝试了

System.Environment.CurrentDirectory <- @"D:\Projects\SQLiteSandbox\SQLiteSandbox\bin\Debug\x86"