2012-11-12 150 views

回答

4

SQLite的版本是由VS2010編譯的,它依賴於C運行時庫,因此它需要Visual C++ 2010 Redistributable Package x86。

+0

* * Microsoft Visual C++ 2010 Redistributable Package x86 **與.Net版本4一起安裝? –

+2

我不知道。但我想.NET包不包含C運行時庫 – Matt

+0

是的,.NET不包含C++可再發行組件包。這完全是另一回事。 .NET Framework編譯用.NET編寫的代碼。 C++可再發行組件是一個「運行時」,這意味着它需要編譯代碼並運行它 - 就像Java具有JRE一樣。 .NET代碼之前有C++代碼。 – vapcguy

1

是的。 SQLite可能是用C++編寫的。它使用/ MD選項編譯,這意味着它在運行時需要msvcrt#.dlls。分發包安裝這個沒有它它不能運行

+0

這是說,不指定/ MD意味着庫不需要msvcrt#.dll(s)?從文檔看來,所有可用的值都以某種方式使用運行時庫。你能澄清嗎? –

+0

如果使用/ MT而不是/ MD編譯C或C++程序,那麼它們不需要運行時,因爲它們使用編譯到代碼中的靜態庫。 – user93353

0

SQLite依賴於Visual C++運行時,但你不需要需要安裝它在客戶端機器上。 system.data.sqlite下載頁面包含幾個已包含運行時的「靜態」包。

所有「靜態」程序包都包含靜態鏈接到適當版本的Visual C++運行時的本機或混合模式程序集二進制文件。通常,這些軟件包用於客戶機器可能沒有安裝所需版本的Visual C++運行時並且由於特權有限而無法安裝的情況。

例如,我的機器上我運行Windows 8.1 x64的,所以我下預編譯靜態鏈接的二進制文件去了64位Windows(.NET Framework 4.0中)和下載的sqlite-netFx40靜態二進制-x64-2010-1.0.90.0.zip

此二進制包包含System.Data.SQLite 1.0.90.0(3.8.2)包的x64版本的所有二進制文件。用於x64的Visual C++ 2010 SP1運行時是靜態鏈接的。 .NET Framework 4.0是必需的。

然後解壓縮包並運行test.exe以確保一切正常。需要零安裝。

+0

問題是你必須確保下載正確的軟件包。很難知道您擁有哪個軟件包/ DLL,如果您只是從開發人員或公司使用的文件共享中獲得它,直到您嘗試運行正在使用的應用程序爲止。對於我所需要的SQLite.Interop.dll程序集,它是必需的 - 沒有C++可再發行組件,它給我錯誤,程序集找不到。安裝後,錯誤消失了,它工作正常。 – vapcguy

0

由於明顯的SQLite開發的C++的SQLite.Interop.dll,因爲他們這樣說:

(11)爲什麼我得到一個DllNotFoundException(對於 「sqlite3.dll」 或「SQLite.Interop .dll「)當試圖運行我的應用程序?

無法找到指定的動態鏈接庫(DLL),或者由於缺少依賴關係而無法裝入指定的動態鏈接庫(DLL)。確保指定的動態鏈接庫位於應用程序目錄或系統PATH中的目錄中,然後重試。 另外,除非使用靜態鏈接到動態鏈接庫的動態鏈接庫,否則必須安裝必要的Visual C++運行時可再發行組件。

強調我的最後一部分。您需要來自system.data.sqlite download page的靜態二進制文件,以便不需要C++運行庫。在同一頁上提供二進制文件的地方,那些需要它的人會告訴你它是 - 例如,4.0的Visual C++ 2010 SP1運行時需要4.0,而.NET 4.5需要更新4,根據頁面。我已經使用了2015版本,Update 3和.NET 4.0版本,沒有任何問題。

注意 - 您可能沒有意識到,但如果您嘗試託管在文件共享中使用SQLite DLL的應用程序,並通過網絡從工作站連接到該應用程序,該工作站仍然需要C++運行時,因爲它正在內存中運行應用程序。

參考:http://system.data.sqlite.org/index.html/doc/trunk/www/faq.wiki#q11

鏈接到微軟的Visual C++ 2015年可再發行組件更新3,我知道有64位,.NET 4.0版本SQLite的二進制文件的工作: https://www.microsoft.com/en-us/download/details.aspx?id=53840

相關問題