【轉】關於在.Net開發中使用Sqlite的版本選擇問題

來源:互聯網
上載者:User

標籤:

如果一個.NET應用要自適應32位/64位系統,只需要在項目的“目標平台”設定為“Any CPU”。但是如果應用中使用了SQLite,情況就不同了。

 

  SQLite的.NET開發包來自是System.Data.SQLite,完成相容ADO.NET介面,也提供了Linq和Entity Framework 6實現。但這不重要,重要的是System.Data.SQLite是由兩部分程式碼群組成的,一部分是非託管的C++代碼實現,一部分是Managed 程式碼與.NET架構介面。由於Unmanaged 程式碼不能構建成“Any CPU”的,所以System.Data.SQLite的下載頁面的每個包都是按32位或64位系統進行了區分的。

 

  說到這裡,順便說一下,看著System.Data.SQLite的下載頁面就頭暈。雖然在下載頁面一開始就花了大量的篇幅來說明如何選擇下載,但是估計沒幾個人會把它看完,所以這裡還是簡單介紹一下。

 

  1) 首先是按類型分為安裝包、非靜態串連的二進位包和靜態串連的二進位包。安裝包會安裝相關的動態庫到系統內,並註冊到GAC(Global Assembly Cache);兩種二進位包的區別在於非託管部分的串連方式不同,非靜態串連的二進位包在使用時需要VC執行階段程式庫的支援。需要注意的是:如果需要在Visual Studio中串連SQLite資料庫,就必須選擇合適的安裝包進行安裝

 

  比如,要在Visual Studio 2010中串連SQLite,應該下載“sqlite-netFx40-setup-bundle-x86-2010-1.0.90.0.exe”,這在下載包的說明中有明確黑體字說明。


[下載包的說明中有明確的黑體字說明]

 

  安裝之後就可以在Visual Studio 2010中串連SQLite了:


[在Visual Studio中串連SQLite]

 

  2) 每個類型都按.NET版本分成了若干小組,目前從.NET 2.0 SP2到.NET 4.5.1,一共支援5個版本的.NET Framework。每個.NET版本又分為32位和64位兩組。選用32位還是64位是根據使用系統來決定的。比如開發的時候是64位系統而發布後運行在32位系統上,就需要在開發時使用64位System.Data.SQLite.dll,而在發布時用32位的System.Data.SQLite.dll替換(看起來很麻煩的樣子~~請看後面的解決辦法~~)。

 

  3) 在每個.NET版本分組中都有2個檔案包,一個帶有“bundle”字樣,另一個沒有。其中帶有“bundle”字樣的表示動態庫是按混合模式編譯的,在使用的時候只需要System.Data.SQLite.dll就可以了,而不帶“bundle”的則是將非託管部分和託管部分分別編譯,System.Data.SQLite.dll不能獨立使用,還需要有SQLite.Interop.dll才能使用。

 

  言歸正傳,如果要使用“Any CPU”的System.Data.SQLite.dll,就必須使用不帶“bundle”字樣,即非混合編譯的二進位包

 

  非混合編譯的二進位包有System.Data.SQLite.dll和SQLite.Interop.dll兩個動態庫。按官方說明,SQLite.Interop.dll是可以放與System.Data.SQLite.dll相同的目錄下,也可以放在x86或x64子目錄下,由System.Data.SQLite.dll根據系統類別型調用。為了確認,下載如下兩個包來進行比較:

sqlite-netFx40-binary-Win32-2010-1.0.90.0.zip

sqlite-netFx40-binary-x64-2010-1.0.90.0.zip

  結果發現只有SQLite.Interop.*不同,其它檔案都完全相同


[比較結果:只有SQLite.Interop.*不同]

 

  然後將兩個包的SQLite.Interop.*分別放在x86和x64子目錄下,合并成一個包。再在不同類型的系統下運行test.exe,結果都是完全通過

 

  最後需要做的就是在Visual Studio項目中引用System.Data.SQLite.dll,再將x86\SQLite.Interop.dll和x64\SQLite.Interop.dll拷貝到項目根目錄,包含在項目中,在屬性中設定“如果較新則複製”或“始終複製”。產生結果就像這樣:

TestSQLite\bin\Debug

│  System.Data.SQLite.dll

│  TestSQLite.exe

├─x64

│      SQLite.Interop.dll

└─x86

       SQLite.Interop.dll

  組合後的包命名為“sqlite-netFx40-static-binary-x86-x64-2010-1.0.90.0.zip”,共用給大家,歡迎下載使用。

◆ 51CTO資來源站點共用

◆ 360雲端硬碟共用

本文出自 “邊城客棧 學海無涯” 部落格,請務必保留此出處http://jamesfancy.blog.51cto.com/2516291/1357462

【轉】關於在.Net開發中使用Sqlite的版本選擇問題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.