.net的应用程序经常会部署在不同硬件配置的工作站上
在编译的时候考虑平台非常重要
尤其在程序可能存在p/invoke的场合
在程序属性的生成选项卡中 会有一个设置目标平台的选项
合理的设置它 会使程序有不同的执行行为
目标平台
Any CPU: 程序会以工作站的系统环境执行 即 如果运行环境是x64 则程序以64位运行 如果是x86 以32位运行
x86: 程序会固定的以32位运行 即使系统环境是x64的 此时程序p/invoke的dll也都是x86的
x64: 程序会固定的以64位执行 使用这种方式编译的程序或动态链接库 无法在x86的系统环境中执行(exe都看不到图标←_←)
Itanium: 程序会编译成适合IA-64的特定CPU架构执行
推荐配置为x86 这样无论如何你的程序都会以32位方式执行 基本不会出错
any CPU可能会让你的程序再64位系统上获得更好的性能
但是如果程序调用的dll会有dllImport行为 就会出现System.BadImageFormatException异常
因为程序错误的调用了x64的类库 或者以x64的行为调用了x32类库
如何判断