最近項(xiàng)目中要用到本地的文件型數(shù)據(jù)庫(kù),很自然的選擇了SQLite。
以前在.net framework 2.0/3.5下使用過(guò)SQLite,一直都沒(méi)有什么問(wèn)題。
不過(guò)這次在.net framework 4.0中開始是怎么都不好用,后來(lái)看到網(wǎng)上有人說(shuō)System.Data.SQLite(1.0.66)是在.net framework 2.0平臺(tái)下編譯的,有的給出了在4.0平臺(tái)下的配置方法,看看這個(gè)版本是2010年更新了好像就再也沒(méi)動(dòng)過(guò)。不會(huì)吧,這么好的項(xiàng)目應(yīng)該不會(huì)掛掉吧。又一頓谷哥后,發(fā)現(xiàn)了http://system.data.sqlite.org/,果然還活著,而且已經(jīng)有.net framework 4.0平臺(tái)下編譯的版本了(1.0.81),用上后發(fā)現(xiàn)Spring.NET還沒(méi)有支持到這個(gè)版本的DbPrivoder,照著文檔,打開Spring.NET源碼,按照文檔上說(shuō)的參考以前版本的寫了個(gè)配置文件(其實(shí)就是把以前版本號(hào)換了換),F(xiàn)5,可以正常運(yùn)行了。
開發(fā)中沒(méi)問(wèn)題了,但是到客戶機(jī)器部署時(shí)又出問(wèn)題了,有的機(jī)器好用有的機(jī)器不好用。單獨(dú)做了個(gè)讀寫SQLite的小程序,最終確定還是System.Data.SQLite的問(wèn)題。
報(bào)的異常是 Could not load file or assembly 'System.Data.SQLite.dll' or one of its dependencies.
但是System.Data.SQLite.dll、System.Data.SQLite.dll兩個(gè)文件都在啊,用ILSpy打開System.Data.SQLite.dll看了一下,引用的貌似都是framework本身的東西了。
又回去度娘、谷哥,看到有人說(shuō)是需要用到SQLite.Interop.dll,于是直接拷貝到目錄、引用都試過(guò)了,還是報(bào)相同的異常。
也有人說(shuō)是32、64位的問(wèn)題,但是我的都是32位的,只是個(gè)客戶端程序,也沒(méi)有IIS等環(huán)境的影響。
繼續(xù)回去找谷哥問(wèn)問(wèn)吧,看到stackoverflow有個(gè)回答說(shuō) System.Data.SQLite.dll is a mixed assembly, i.e. it contains both managed code and native code.,下面還有人說(shuō)需要安裝Microsoft Visual C++ 2010 SP1 Redistributable Package (x86),看起來(lái)有點(diǎn)道理,試了一下果然問(wèn)題解決了。
一直以來(lái)都以為System.Data.SQLite只要安裝了.net framework就可以讀SQLite數(shù)據(jù)庫(kù)了,原來(lái)還需要安裝Microsoft Visual C++ Redistributable Package啊。