簡體   English   中英

x86 DLL起作用但x64 DLL不起作用

[英]x86 DLL Works But Not x64 DLL

我正在嘗試將System.Data.SQLite包含在我的項目中,該項目使用C#編碼並使用.NET Framework v4。 我有點困惑...我正在運行Windows 8.1 x64,並且該項目的平台目標設置為Any CPU 如果我包括x.64版本的System.Data.SQLite.dll則會收到一條錯誤消息,指出The type or namespace name 'SQLite' does not exist in the namespace 'System.Data' (are you missing an assembly reference?) 但是,如果我包含System.Data.SQLite.dllx86版本,則可以正常編譯。 是不是應該相反(x86版本不應該編譯)? 由於x86版本可以使用,那么我可以在編譯后的項目中僅包含x86版本嗎? 如果我需要同時包含System.Data.SQLite.dll (以及SQLite.Interop.dll )的x86和x64版本,那我該怎么做呢? 我還要注意System.Data.SQLite的版本是v1.0.94.0(適用於.NET Framework 4)。

除非需要x64版本,否則可以僅包含x86版本並將項目構建為x86。 除非您需要64位地址空間,否則這對於大多數項目都是安全的。

僅當您的應用程序是完全托管的,並且對特定體系結構沒有任何依賴性時,才應使用AnyCPU。 使用SQLite等本地代碼時,應用程序應始終設置特定的平台目標。

SQLite的x86版本而不是x64起作用的原因是,在現代版本的Visual Studio中,首選的AnyCPU配置默認為/ platform:anycpu32bit而不是/ platform:anycpu。 首選anycpu32bit時,該應用程序將盡可能使用32位模式,並且僅當32位模式不可用時才使用64位模式。

對於這種情況,沒有比Nuget更好的技術了! 您可以直接使用SqlLite nuget軟件包 ,該軟件包與x86 / x64明確兼容。 我在AnyCpu,x86和x64中進行了嘗試,在兩種情況下都沒有編譯錯誤。

因此,您只需要刪除舊的引用,然后右鍵單擊項目引用,然后選擇“ Manage NuGet Packages”,然后搜索System.Data.SQLite

在此處輸入圖片說明

而且,您將永遠是最新的:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM