即使引用fs项目中的模块,所有SQLite .NET包都不能在FSI中工作。我尝试过System.Data.SQLite,SQLitePCL.raw和Microsoft.Data.Sqlite。
如果启动进程的可执行文件完全由托管代码组成,它将使用本机的本机处理器体系结构运行,该体系结构将是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
有没有人找到解决方案? SQLite在编译的F#程序和调试模式下运行良好。
答案 0 :(得分:3)
artice Loading Native DLLs in F# Interactive具有解决加载原生DLLS问题的正确技巧。
在我的情况下,我成功地尝试了
System.Environment.CurrentDirectory <- @"D:\Projects\SQLiteSandbox\SQLiteSandbox\bin\Debug\x86"