目標平台可以從專案-屬性-建置,來做設定
它預設值是Any CPU,共以下幾種:
- Any CPU: 這個模式表示所編譯的EXE/DLL在64位元平台(OS)就用64位元跑,32位元就用32位元跑
- x86: 這個模式表示所編譯的EXE/DLL是以32位元模式 , 這除了可以在32位元OS跑之外,也可以在64位元OS跑,乃因64位元OS提供一種WOW64模式(這裡有一篇說的很好),可讓32bit的程式也可在64位元上模擬跑。
- x64: 這個模式表示所編譯的EXE/DLL只能在64位元模式跑, 因此只能在64位元OS跑
雖然有上面這麼多種方式,但對於Assembly的編譯事不影響,因為.net採用IL(中介碼),不同平台是在runtime時才JIT把IL編譯成該平台使用的Native code
了解了以上,我們利用適用vs2012 開發人員命令題示字元,輸入
corflags /?
列出說明,你就可以猜到這指令可以修改平台目標 接著輸入以下來看一下的exe/dll
corflags xx.dll [vs2012]
[vs2010]
32BITREF是針對EXE,1時表示在 64BIT平台跑32位元程式,dll如果設為1會發生錯誤
這邊只要看PE, 32BITREQ(vs2012)/32BIT(vs2010),其組合如下:
PE 32BIT[REQ] Any CPU PE32 0 x32 PE32 1 x64 PE32+ 0
參考
Corflags: http://msdn.microsoft.com/en-us/library/ms164699.aspxVisual Studio: “Target CPU” setting in “Advanced Compiler Settings”. What does it do?
Visual Studio .NET Platform Target Explained
http://blogs.msdn.com/b/gauravseth/archive/2006/03/07/545104.aspx
使用dumpbin http://stackoverflow.com/questions/4216841/visual-studio-target-cpu-setting-in-advanced-compiler-settings-what-does-i
沒有留言:
張貼留言