![](/img/trans.png)
[英]x86 Assembly in x64 Appdomain - x86 exe works, x86 dll fails
[英]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.dll
的x86
版本,則可以正常編譯。 是不是應該相反(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.