是的,你需要確保你把所有的DLL的64位版本你參考。不,依靠你的32位測試絕對不安全! (您已經知道了吧?)
我們幾年前移植我們的系統爲64位,由幾件事情感到驚訝:
- 一般港口是容易得多,比我們此前的預期在最奇怪的地方出現
- 最困難的問題,我們所想象的地方將是直接的
- 後續構建已經無故障
一些unexpe的例子cted和棘手的問題...
我們的系統包括一個Visual Studio項目嚮導。 Visual Studio只有32位,但我們的客戶可能仍然希望定位到64位機器。所以我們的x86安裝程序必須包含我們的x64程序集。通常沒問題 - 安裝程序發現我們在x86項目中包含了x64文件,發出警告,但仍在繼續。但是其中一個程序集包含混合託管/非託管代碼,我們的安裝程序無法處理該代碼。 (我們當時正在使用Visual Studio安裝程序,但自那時起我們一直在成長。)因此,我們編寫了一個工具,對64位DLL進行十六進制編碼並將其寫入文本文件,將該文件包含在安裝程序中項目,然後有一個自定義安裝程序步驟,逆轉編碼並恢復DLL。
我們的項目嚮導依賴於一些COM DLL,它們必須在32位註冊表中註冊,因爲Visual Studio是32位的。但在x64上,我們的安裝程序以64位運行,因此會調用64位regsvr32.exe,它將DLL註冊到錯誤的位置。所以我們編寫了一個在32位註冊表中註冊DLL的64位工具。
恰巧我們的嚮導需要知道我們產品的安裝位置。所以我們的安裝程序將這些信息寫入註冊表。但在x64上,安裝程序以64位運行並將該信息寫入64位註冊表,但我們的嚮導以32位運行在Visual Studio中,因此無法讀取註冊表的這一部分。所以我們再一次寫了一個特殊的工具讓安裝程序將信息寫入註冊表的兩端。
這些問題可能聽起來不那麼糟糕。畢竟,解決方案非常整齊,非常小巧。但考慮一下:我們的系統是混合託管/非託管COM/C++和C#,第三方庫如Boost,Apache HTTPd和OpenSSL,所有這些都必須重新編譯。我原本以爲這是很難的部分,但只花了兩天的時間來移植代碼的相關部分並讓項目編譯。然後花了整整一週的時間來了解和解決我上面描述的問題。話雖如此,但整個港口只用了一週半的時間,我仍感到非常驚喜。
一個離別的想法......你說你想利用你的64位機器的力量。那是什麼意思?非常粗略地說,除非你需要訪問超過2GB的RAM,否則你將無法從64位運行中獲益。
可能重複的[C#開發的64位東西](http://stackoverflow.com/questions/ 1889941/64-bit-stuff-for-c-sharp-development) – 2012-03-15 22:49:01
如果您的應用程序由純粹的.NET程序集組成,那麼您可能會考慮將目標設定爲AnyCPU而不是32位或64位。然後,您的應用程序將在目標機器上使用最合適的運行時版本(32位或64位)。但是下面答案中的測試評論依然存在。 – Glenn 2012-03-16 02:47:57