.NET,“任何 CPU/64 位 (x64)/32 位 (x86)”最佳實踐、提示和技巧
如果 .NET 程序直接或間接需要呼叫平台相關/本機/非託管程式碼,它可能會崩潰。
這個 32 位/64 位主題是在我買了一台安裝了 64 位 Windows 7 的新筆記型電腦並嘗試使用SQLite數據庫進行開發後想到的。
System.Data.SQLite包含託管程式碼和非託管程式碼。有 32 位版本和 64 位版本。兩者俱有相同的文件名,但大小不同,並且您的 EXE 文件必須使用正確的文件。更複雜的是:我的Visual Studio 2010 調試器是 32 位應用程序,因此在使用GAC中的“System.Data.SQLite-64bit”時無法調試!
作為 .NET 開發人員,我們需要指南/專有技術/最佳實踐。
而據我所知,收集此類資訊的最佳地點是這個網站。
因此,請分享您的想法和已知問題,它們可以作為在 32/64/anyCPU .NET 世界中生存的最佳實踐或指南。
我希望每個“答案”都有一個問題/技巧,因此可以輕鬆地對其進行評論/更新/引用。
- 隨意給出幾個“答案”。
我也會分享我自己的知識作為這個問題的答案。
當涉及本機程式碼時,提供額外的“僅限 x86”main.exe 可以使生活更輕鬆
在閱讀了 anycpu-exes-are-also-more-trouble-then-they-re-worth 之後,我意識到提供額外的“僅 x86”main.exe 可以讓生活更輕鬆。
由於 64 位 Windows 7 可以執行 x86-32 位應用程序,因此 x86 程序將在大多數 .NET 系統上執行(但不能在非英特爾 Mono 系統上執行)。
只要Windows 7 64 位 Visual Studio 2010 調試器是 32 位應用程序,就可以輕鬆調試 x86 應用程序。
x86 版本有盡可能多的“任何 CPU”DLL,除了主要的 EXE 和特定於 CPU 的 DLL。
對於不能執行 x86 程式碼或需要大量記憶體的機器,您可以提供額外的“任意 CPU”EXE 版本。此版本需要足夠的安裝以確保使用正確的平台特定程式碼。
Visual Studio 2010 如何:將項目配置為目標平台描述瞭如何將平台設置為 x64。以同樣的方式定位 x86。