2009-10-25 34 views
6

我編寫了一個使用sqlite的應用程序,它在大多數系統的上運行良好。它是用C#編寫的,唯一的非框架程序集是由System.Data.SQLite.dll包含的sqlite。在某些計算機上應用程序無法加載sqlite dll文件

我在所有機器上覆制它(複製粘貼exe文件,數據庫文件和System.Data.SQLite文件)。它適用於我所有的個人電腦以及我嘗試過的大部分個人電腦。

但後來我有報道稱,對某些人來說,它拋出以下異常:

無法加載文件或程序集 「System.Data.SQLite,版本= 1.0.65.0, 文化=中性, PublicKeyToken = db937bc2d44ff139'或 其依賴關係之一。試圖用 加載程序的格式不正確 。

現在我已經確定dll文件與應用程序exe文件在同一個文件夾中。這是相同的DLL,具有上述例外消息中所述的相同版本。

我真的很困惑,所以我創建了一個全新的虛擬機,安裝了windows 7專業版,並且只是複製粘貼的文件,而且工作。因此,如果它在新窗口上工作,我無法想象其他PC可能會丟失什麼......

注意:其中兩個計劃引發異常的計算機也運行Windows 7專業版。

我真的很感激有這方面的幫助,因爲我是新鮮的想法......

回答

12

這裏有一個可能性:是工作,而不是工作機器之間的區別32位與64位位?你是否正在爲「任何CPU」構建,當你應該建立你的外部DLL的位?

+0

謝謝!完全錯過了sqlite.NET有兩個不同的dll文件 - 對於x32和x64。我改變了它不工作的機器上的dll,現在它工作。我從來沒有想過要問他們32位和64位...... – 2009-10-25 19:38:23

+0

有沒有辦法在運行時檢查平臺是否是32/64位,並在這種情況下采取相應措施? – Ben 2010-05-25 00:57:23

+0

// @本:恐怕我不知道。您需要在運行時動態加載正確的sqlite DLL,但我不知道如何在.net中執行此操作。 – RichieHindle 2010-05-26 08:32:40

1

引發異常的計算機可能運行64位版本的Windows,並且程序使用AnyCPU配置。 System.Data.SQLite DLL是一個兩面獸:一個託管部分和一個本地部分。這可能是本機部分對異常負責。

有關更多信息,請參閱this question

1

您是否檢查過目標系統是64位還是32位?

這可能是您的某個依賴項需要32位版本的Windows。要解決此問題,您可以在C#項目的屬性中指定平臺目標:選擇x86而不是任何CPU。

相關問題