亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

讓Sqlite脫離VC++ Runtime獨(dú)立運(yùn)行的方法

 更新時(shí)間:2014年07月17日 11:31:28   投稿:mdxy-dxy  
這篇文章主要介紹了讓Sqlite脫離VC++ Runtime獨(dú)立運(yùn)行的方法,需要的朋友可以參考下

目前手頭上的一個(gè).NET項(xiàng)目用到了Sqlite,這是我第一次接觸和使用Sqlite,總體感覺(jué)還是非常不錯(cuò)的。這里把我使用Sqlite的經(jīng)驗(yàn)跟大家分享一下。

一.關(guān)于Sqlite  

  Sqlite是一款開(kāi)源的、適合在客戶端和嵌入式設(shè)備中使用的輕量級(jí)數(shù)據(jù)庫(kù),支持標(biāo)準(zhǔn)的SQL。

  不像SqlServer或Oracle的引擎是一個(gè)獨(dú)立的進(jìn)程、通過(guò)TCP或命名管道等與程序進(jìn)行通信,SQLite卻是作為程序的一個(gè)部件、一個(gè)構(gòu)成部分,使用Sqlite的方式就是直接在程序中進(jìn)行API調(diào)用。

  原始的Sqlite是沒(méi)有一個(gè)向SqlServer企業(yè)管理器的可視化操作程序的,但是有個(gè)第三方開(kāi)發(fā)的應(yīng)用SqliteStudio非常不錯(cuò),基本的建庫(kù)、建表、編輯數(shù)據(jù)、導(dǎo)出數(shù)據(jù)等功能都支持得很好。SqliteStudio運(yùn)行截圖如下所示:

Sqlite資源鏈接:

(1)Sqlite官網(wǎng):可以從官網(wǎng)下載源碼、或下載已經(jīng)編譯好的二進(jìn)制版本。支持的系統(tǒng)包括:Linux、MacOS、Windows、.NET。

(2)SqliteStudio:好用的Sqlite可視化管理器。

二.在.NET中使用Sqlite

  從官網(wǎng)下載.NET版本的Sqlite,其主要包括兩個(gè)dll:SQLite.Interop.dll、System.Data.SQLite.dll。

(1)System.Data.SQLite.dll是一個(gè)標(biāo)準(zhǔn)的托管dll,我們可以直接在.NET項(xiàng)目中引用并使用它,就像使用.NET自帶的System.Data命名空間中的各個(gè)對(duì)象一樣。

(2)SQLite.Interop.dll是一個(gè)非托管的dll,是Sqlite引擎核心,我們需要將其拷貝到運(yùn)行目錄下,在運(yùn)行時(shí),它會(huì)被System.Data.SQLite.dll調(diào)用。

三.讓Sqlite脫離VC++運(yùn)行時(shí)

  我們?cè)陧?xiàng)目開(kāi)發(fā)完畢后測(cè)試的過(guò)程中發(fā)現(xiàn),使用了Sqlite的客戶端程序在某些機(jī)器上運(yùn)行時(shí)會(huì)報(bào)錯(cuò),如下所示:

  無(wú)法加載 DLL"SQLite.Interop.DLL";由于應(yīng)用程序配置不正確,應(yīng)用程序未能啟動(dòng)。重新安裝應(yīng)用程序可能會(huì)糾正這個(gè)問(wèn)題。(異常來(lái)自 HRESULT:0x800736B1)

  經(jīng)過(guò)一番折騰,才發(fā)現(xiàn)是這些機(jī)器上沒(méi)有安裝VC++運(yùn)行時(shí)(Visual C++ 2005 SP1 runtime),而SQLite.Interop.dll的運(yùn)行是需要VC++運(yùn)行時(shí)支持的。這點(diǎn)太不友好了。我們的項(xiàng)目是基于.NET 2.0開(kāi)發(fā)的,windows xp sp1 及以上版本都自帶了這個(gè)Framework,而這些機(jī)器不一定安裝了VC++運(yùn)行時(shí)。所以我第一反應(yīng)就是,嘗試讓Sqlite在沒(méi)有安裝VC++運(yùn)行時(shí)的機(jī)器上也能正常運(yùn)行。

1.方案一

  我baidu了一下,有個(gè)似乎可行的方案是這樣的:將msvcm80.dll、msvcp80.dll、msvcr80.dll這幾個(gè)動(dòng)態(tài)庫(kù)也放到運(yùn)行目錄下。這個(gè)方案我不太喜歡,于是我嘗試自己動(dòng)手解決問(wèn)題。

2.方案二

  憑借我還未完全忘記的一點(diǎn)VC++基礎(chǔ),我知道VC++程序在編譯時(shí)可以選擇是動(dòng)態(tài)鏈接到依賴的庫(kù)還是靜態(tài)鏈接,如果是靜態(tài)連接,編譯生成的二進(jìn)制程序中就相當(dāng)于包含了一份依賴庫(kù)的拷貝。所以,我的想法是,重新編譯 SQLite.Interop.dll,使其靜態(tài)鏈接到VC++運(yùn)行庫(kù)。我下載了Sqlite的源碼,用VS2010打開(kāi),截圖如下:

     

   SQLite.Interop.2010這個(gè)項(xiàng)目是核心,我們需要對(duì)它的一些設(shè)置稍微做些修改,這些小修改我花了一些時(shí)間摸索才成功,這里就略去具體的摸索過(guò)程,直接給出摸索成果:

(1)打開(kāi)SQLite.Interop.2010項(xiàng)目屬性頁(yè)面,配置屬性 -> C/C++ -> 代碼生成 -> 運(yùn)行庫(kù),該項(xiàng)設(shè)置為 多線程調(diào)試 (/MTd)。

(2)繼續(xù) 配置屬性 -> 清單工具 -> 輸入和輸出 -> 嵌入清單,該項(xiàng)原來(lái)是“是”,改成“否”。

(3)顯示所有項(xiàng)目文件,然后找到SQLite.Interop.2010.props文件,并打開(kāi)。刪掉其中的<INTEROP_MIXED_NAME>配置節(jié)點(diǎn)。

(4)從項(xiàng)目中移除“Resource Files”文件夾。

(5)重新編譯項(xiàng)目,生成的SQLite.Interop.dll便是我們所需要的。

 四.下載成果

  除非特別需求,否則大家沒(méi)有必要重復(fù)這一過(guò)程,我把生成的Sqlite二進(jìn)制版本直接提供給大家下載使用。

補(bǔ)充:Sqlite官網(wǎng)已經(jīng)提供靜態(tài)連接的庫(kù)了
http://system.data.sqlite.org/downloads/1.0.93.0/sqlite-netFx20-static-binary-bundle-Win32-2005-1.0.93.0.zip

相關(guān)文章

  • ASP.Net Core MVC基礎(chǔ)系列之中間件

    ASP.Net Core MVC基礎(chǔ)系列之中間件

    這篇文章介紹了ASP.Net Core MVC的中間件,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • .Net創(chuàng)建型設(shè)計(jì)模式之抽象工廠模式(Abstract?Factory)

    .Net創(chuàng)建型設(shè)計(jì)模式之抽象工廠模式(Abstract?Factory)

    這篇文章介紹了.Net設(shè)計(jì)模式之抽象工廠模式(Abstract?Factory),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • ASP.NET Core應(yīng)用程序配置文件AppSetting.json

    ASP.NET Core應(yīng)用程序配置文件AppSetting.json

    這篇文章介紹了ASP.NET Core應(yīng)用程序配置文件AppSetting.json,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • .NET6使WebApi獲取訪問(wèn)者IP地址

    .NET6使WebApi獲取訪問(wèn)者IP地址

    這篇文章介紹了.NET6使WebApi獲取訪問(wèn)者IP地址的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • ASP.NET Table 表格控件的使用方法

    ASP.NET Table 表格控件的使用方法

    使用 Table 控件可以在 ASP.NET 網(wǎng)頁(yè)上創(chuàng)建服務(wù)器可編程的表格。如果要?jiǎng)?chuàng)建的是靜態(tài)表格(運(yùn)行時(shí)不會(huì)在其中添加或更改內(nèi)容的表格),則應(yīng)使用 HTML 表格,而不是 Table 控件。
    2016-04-04
  • 一步步打造漂亮的新聞列表(無(wú)刷新分頁(yè)、內(nèi)容預(yù)覽)第一步

    一步步打造漂亮的新聞列表(無(wú)刷新分頁(yè)、內(nèi)容預(yù)覽)第一步

    新聞列表是信息管理系統(tǒng)中最常見(jiàn)的,也是最簡(jiǎn)單的,一些簡(jiǎn)單的新聞列表就是一個(gè)table,然后里面循環(huán)寫入數(shù)據(jù)
    2010-07-07
  • C#枚舉的高級(jí)應(yīng)用

    C#枚舉的高級(jí)應(yīng)用

    這篇文章介紹了C#枚舉的高級(jí)應(yīng)用,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • .NET Core 中的并發(fā)編程

    .NET Core 中的并發(fā)編程

    在.NET Core中,任務(wù) (tasks) 是并發(fā)編程的主要抽象表述,但還有其他支撐類可以使我們的工作更容易。下面小編和大家一起學(xué)習(xí)一下吧
    2019-05-05
  • 為ABP框架添加基礎(chǔ)集成服務(wù)

    為ABP框架添加基礎(chǔ)集成服務(wù)

    這篇文章介紹了為ABP框架添加基礎(chǔ)集成服務(wù)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • Linux?CentOS下docker部署Asp.Net?Core(.Net6)

    Linux?CentOS下docker部署Asp.Net?Core(.Net6)

    這篇文章介紹了Linux?CentOS下docker部署Asp.Net?Core(.Net6)的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12

最新評(píng)論