.Net编译环境x86,x64,anycpu的区别
一、定义
二、选择不同后的行为
三、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