我試圖編譯任何CPU .NET項目,但我有鏈接它有SQLite庫x86和x64平臺的不同版本。僅將DLL版本更改爲x64沒有幫助,應用程序無法啓動,我需要使用x64引用重新編譯代碼。 當我添加x86和x64引用時,由於衝突,它無法編譯。 我無法使用x86編譯應用程序,因爲我使用的系統COM庫之一在WOW64下不起作用。
All 32-bit VSS applications (requesters, providers, and writers) must run as native 32-bit or 64-bit applications. Running them under WOW64 is not supported
所以我需要建立任何CPU項目,但這個問題我看到目前唯一的解決辦法是有用於x86和x64的重複項目。有更好的嗎?
UPDATE
當我引用項目64庫,但嘗試加載86庫我得到下面的異常。
The located assembly's manifest definition does not match the assembly reference.
謝謝。我見過這樣的帖子,但問題在於改變DLL只是沒有多大幫助。當我將64位DLL複製到我的文件夾時仍不起作用,我仍然需要重新編譯引用這些64位庫的應用程序。難道我做錯了什麼?我也不明白我應該參考哪個版本? – axe 2012-07-24 11:45:31
是的。本機庫必須具有相同的名稱,但必須位於不同的文件夾中(例如應用程序的子文件夾)。在運行時你可以調用SetDllDirectory來使操作系統在正確的文件夾中查找位數。或者使用[由Rover建議]的AppDomain.CurrentDomain.AssemblyResolve事件(http://stackoverflow.com/questions/3787428/loading-x86-or-x64-assembly#comment7029800_6060754)。你不直接引用這些庫,SQLite託管包裝器。你的代碼將使包裝器加載底層本地庫的正確版本。 – GSerg 2012-07-24 11:49:07
我再次嘗試過,它不適合我。應用程序在啓動時崩潰。問題是我在項目中引用了x64庫,但我在運行時選擇了x86庫。如果我使用x86庫構建我的應用程序,它完全適用於x86窗口,否則它不會。 – axe 2012-07-24 12:04:52