一、定義
二、選擇不同后的行為
三、AnyCPU(Prefer 32-bit)(看了waterlv,大水哥的博文)
這是在右擊屬性,選擇首選32位才會使用的方法,必須使用 .net framework 4.5 以上才可以使用。在這個編譯下,程序運行都是 32 位。

在 32 位系統下,運行 32 位程序
在 64 位系統下,運行 32 位程序,但是可以獲得 4G 內存
在 ARM 下,運行 32 位程序
如果使用 AnyCPU 那么編譯為 IL 是不需要加平台,程序在機器運行才判斷機器平台,自動編譯為機器可以運行的程序。
那么 AnyCPU(Prefer 32-bit) 和 x86 有什么區別?實際上在 ARM 系統,只能使用 AnyCPU(Prefer 32-bit) 運行 32 位程序,如果選擇 x86 就無法運行。
為什么需要在 64 位的設備使用 AnyCPU(Prefer 32-bit),因為如果存在一些庫只能在 32位程序運行,那么就需要運行的程序是 32 位,所以需要使用這個方法。
如果在運行的時候,如何判斷當前的系統版本?
可以使用 Environment 來判斷,Environment.Is64BitProcess
可以判斷當前的程序運行的是 32 還是 64 ,通過 Environment.Is64BitOperatingSystem
可以判斷系統
那么如何判斷一個 dll 是 x86 還是 any cpu?
可以打開開發者命令,然后輸入 corflags 判斷,開發者命令一般如果是安裝 vs2017 就是Developer Command Prompt for VS 2017
,通過開始就可以找到。
corflags lindexi.dll
看輸出,就可以知道這個庫是什么
Any CPU:
PE: PE32 32BIT: 0
x86:
PE: PE32 32BIT: 1
x64:
PE: PE32+ 32BIT: 0
四、其他編譯選擇
- anycpu 默認的編譯
- anycpu32bitpreferred 在 .NET Framework 4.5 和以上才可以使用
- ARM 程序編譯為 ARM 運行
- x64
- x86
- Itanium
如果使用命令編譯,那么可以使用platform
和字符串
csc /platform:anycpu filename.cs