如果一個(gè).NET應(yīng)用要自適應(yīng)32位/64位系統(tǒng),只需要在項(xiàng)目的“目標(biāo)平臺”設(shè)置為“Any CPU”。但是如果應(yīng)用中使用了SQLite,情況就不同了。

SQLite的.NET開發(fā)包來自是System.Data.SQLite,完成兼容ADO.NET接口,也提供了Linq和Entity Framework 6實(shí)現(xiàn)。但這不重要,重要的是System.Data.SQLite是由兩部分代碼組成的,一部分是非托管的C++代碼實(shí)現(xiàn),一部分是托管代碼與.NET框架接口。由于非托管代碼不能構(gòu)建成“Any CPU”的,所以System.Data.SQLite的下載頁面的每個(gè)包都是按32位或64位系統(tǒng)進(jìn)行了區(qū)分的。
說到這里,順便說一下,看著System.Data.SQLite的下載頁面就頭暈。雖然在下載頁面一開始就花了大量的篇幅來說明如何選擇下載,但是估計(jì)沒幾個(gè)人會(huì)把它看完,所以這里還是簡單介紹一下。
1) 首先是按類型分為安裝包、非靜態(tài)連接的二進(jìn)制包和靜態(tài)連接的二進(jìn)制包。安裝包會(huì)安裝相關(guān)的動(dòng)態(tài)庫到系統(tǒng)內(nèi),并注冊到GAC(Global Assembly Cache);兩種二進(jìn)制包的區(qū)別在于非托管部分的連接方式不同,非靜態(tài)連接的二進(jìn)制包在使用時(shí)需要VC運(yùn)行時(shí)庫的支持。需要注意的是:如果需要在Visual Studio中連接SQLite數(shù)據(jù)庫,就必須選擇合適的安裝包進(jìn)行安裝。
比如,要在Visual Studio 2010中連接SQLite,應(yīng)該下載“sqlite-netFx40-setup-bundle-x86-2010-1.0.90.0.exe”,這在下載包的說明中有明確黑體字說明。
[下載包的說明中有明確的黑體字說明]安裝之后就可以在Visual Studio 2010中連接SQLite了:
[在Visual Studio中連接SQLite]2) 每個(gè)類型都按.NET版本分成了若干小組,目前從.NET 2.0 SP2到.NET 4.5.1,一共支持5個(gè)版本的.NET Framework。每個(gè).NET版本又分為32位和64位兩組。選用32位還是64位是根據(jù)使用系統(tǒng)來決定的。比如開發(fā)的時(shí)候是64位系統(tǒng)而發(fā)布后運(yùn)行在32位系統(tǒng)上,就需要在開發(fā)時(shí)使用64位System.Data.SQLite.dll,而在發(fā)布時(shí)用32位的System.Data.SQLite.dll替換(看起來很麻煩的樣子~~請看后面的解決辦法~~)。
3) 在每個(gè).NET版本分組中都有2個(gè)文件包,一個(gè)帶有“bundle”字樣,另一個(gè)沒有。其中帶有“bundle”字樣的表示動(dòng)態(tài)庫是按混合模式編譯的,在使用的時(shí)候只需要System.Data.SQLite.dll就可以了,而不帶“bundle”的則是將非托管部分和托管部分分別編譯,System.Data.SQLite.dll不能獨(dú)立使用,還需要有SQLite.Interop.dll才能使用。
言歸正傳,如果要使用“Any CPU”的System.Data.SQLite.dll,就必須使用不帶“bundle”字樣,即非混合編譯的二進(jìn)制包。
非混合編譯的二進(jìn)制包有System.Data.SQLite.dll和SQLite.Interop.dll兩個(gè)動(dòng)態(tài)庫。按官方說明,SQLite.Interop.dll是可以放與System.Data.SQLite.dll相同的目錄下,也可以放在x86或x64子目錄下,由System.Data.SQLite.dll根據(jù)系統(tǒng)類型調(diào)用。為了確認(rèn),下載如下兩個(gè)包來進(jìn)行比較:
sqlite-netFx40-binary-Win32-2010-1.0.90.0.zip
sqlite-netFx40-binary-x64-2010-1.0.90.0.zip
結(jié)果發(fā)現(xiàn)只有SQLite.Interop.*不同,其它文件都完全相同

[比較結(jié)果:只有SQLite.Interop.*不同]
然后將兩個(gè)包的SQLite.Interop.*分別放在x86和x64子目錄下,合并成一個(gè)包。再在不同類型的系統(tǒng)下運(yùn)行test.exe,結(jié)果都是完全通過

最后需要做的就是在Visual Studio項(xiàng)目中引用System.Data.SQLite.dll,再將x86\SQLite.Interop.dll和x64\SQLite.Interop.dll拷貝到項(xiàng)目根目錄,包含在項(xiàng)目中,在屬性中設(shè)置“如果較新則復(fù)制”或“始終復(fù)制”。生成結(jié)果就像這樣:
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云盤共享
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)站標(biāo)題:讓使用了SQLite的.NET應(yīng)用自適應(yīng)32位/64位系統(tǒng)-創(chuàng)新互聯(lián)
分享鏈接:http://chinadenli.net/article44/hhdhe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、網(wǎng)站維護(hù)、網(wǎng)站營銷、做網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容