背景:一個第三方組件是C++.NET 32位開發的,后被C#(基於FrameWork4.0)調用並封裝成組件,此二次封裝的組件無法運行於64位操作系統上。
開發環境:VS2012;
解決辦法:
1、於64位操作系統上分別安裝vcredist_VS2010_x64和vcredist_VS2010_x86;
2、選擇宿主Exe 的目標框架為FrameWork 4.5,如果有條件組件也可以用Framework4.5,實際證明4.0也可,請看后續說明;
3、把宿主Exe和組件程序分別設置目標平台為Any CPU模式,將宿主程序目標平台下面的 “首選32位”選中,注意如果是Framework4.0這個選項不可用;
4、編譯宿主和組件,所有應用正常。
后續:
1、把宿主程序重新改回Framework並進第編譯,此時也可以正常運行;
2、根據過程分析4.0和4.5編譯器中在AnyCPU模式下,有個“首選32位”的參數,估計是VS2012的BUG,這個參數只有在4.5模式下才能可視化操作,而此參數保存下來了,后續再利用4.0編譯也起到了作用。
PS:這個選項只在VS2012中有,其它版本開發工具中沒發現。
參考:http://msdn.microsoft.com/zh-cn/library/vstudio/zekwfyz4.aspx