在VisualStudio中项目平台属性包含x86/x64/AnyCPU三个选项,之前的项目中并没有特别去关注这一点,最近的项目中涉及到了在不同平台运行的问题,所以专门了解并整理了这方面的知识。

x86/x64/AnyCPU的含义
在vs中这一选项被称为“目标平台”,也就是编译成功的项目最终是要在什么平台上运行。

编译(目标)平台    含义
x86    将程序集编译为由兼容 x86 的 32 位公共语言运行库运行;
x64    将程序集编译为由支持 AMD64 或 EM64T 指令集的计算机上的 64 位公共语言运行库运行;
AnyCPU    (默认值)将程序集编译为在任意平台上运行。
x86/x64/AnyCPU的区别
我们使用.NET平台开发程序所构造的项目被称为“程序集”,程序集的输出类型有Windows应用程序、控制台应用程序、类库。使用频率较高的是Windows应用程序和类库。Windows应用程序一般包括我们常见的WinForm、WPF程序,文件格式通常为可执行文件(.exe);类库一般是WEB程序或动态链接库,文件格式通常为.dll。 
关于x86/x64/AnyCPU之间的区别,我们就看一看exe和dll两类文件在不同平台的操作系统上运行的结果。

x86操作系统
目标平台    程序类型    运行结果
x86    应用程序exe    在32位CLR上运行
x86    类库dll    在32位CLR上运行
x64    应用程序exe    无法运行
x64    类库dll    无法运行
AnyCPU    应用程序exe    在32位CLR上运行
AnyCPU    类库dll    在32位CLR上运行
x64操作系统
目标平台    程序类型    运行结果
x86    应用程序exe    在WOW下的32位CLR上运行
x86    类库dll    在WOW下的32位CLR上运行
x64    应用程序exe    在64位CLR上运行
x64    类库dll    在64位CLR上运行
AnyCPU    应用程序exe    在64为CLR上运行
AnyCPU    类库dll    在与加载它的进程相同的CLR上运行
从上面的运行结果来看我们可以基本确定一个结论:

主程序和其引用的类库在运行时的平台应该保持一致。

不过这样理解起来还是有些问题,我们举几个例子: 
1. AnyCPU的应用程序+AnyCPU的类库 
在x86的操作系统上,应用程序会在32位CLR上运行,所以它引用的类库也会在32位CLR上运行; 
在x64操作系统上,应用程序许会在64位CLR上运行,所以它引用的类库也会在64为CLR上运行。 
2. x86的应用程序+AnyCPU的类库 
在x86的操作系统上,应用程序会在32位CLR上运行,它引用的类库也会在32位CLR上运行; 
在x64的操作系统上,应用程序会在WOW下的32位CLR上运行,它引用的类库也会在WOW下的332位CLR上运行。 
3. x64的应用程序+AnyCPU的类库 
在x86的操作系统上,应用程序无法运行,更不要说引用类库了; 
在x64的操作系统上,应用程序会在64位CLR上运行,引用的类库也会在64位CLR上运行。 
4. AnyCPU的应用程序+x64的类库 
在x86的操作系统上,应用程序会在32位CLR上运行,但引用的类库无法在32为CLR上运行,程序报错; 
在x64的操作系统上,应用程序会在64位CLR上运行,引用的类库也会在64位CLR上运行。 
5. AnyCPU的应用程序+x86的类库 
在x86的操作系统上,应用程序会在32位CLR上运行,引用的类库也会在32位CLR上运行; 
在x64的操作系统上,应用程序会在64位CLR上运行,但引用的类库无法在64位CLR上运行。

有了以上的例子,是不是有点明白了?当然我们的主程序并不限于应用程序exe,不要忘了常见的Web应用的主程序就是类库,不过原理还是一样的:主程序和引用类库在运行时的平台要保持一致。

一般来讲,我们可以把主程序的目标平台根据实际需求设置为跟部署的操作系统一致,类库最好是AnyCPU。当然特殊的部署环境还要特殊考虑。
--------------------- 
作者:ludewig 
来源:CSDN 
原文:https://blog.csdn.net/lordwish/article/details/52312015 
版权声明:本文为博主原创文章,转载请附上博文链接!

关于.NET编译的目标平台(AnyCPU,x86,x64)相关推荐

  1. 关于.NET编译的目标平台(AnyCPU,x86,x64) (转)

    关于.NET编译的目标平台(AnyCPU,x86,x64)(转) 今天有项目的代码收到客户的反馈,要求所有的EXE工程的目标平台全部指定成x86,而所有DLL工程的目标平台全部指定成AnyCPU . ...

  2. 关于VS项目平台的x86,x64,Any CPU以及Debug和Release

    相信对于很多刚接触打包程序的同志来说,关于x86,x64,Any CPU这三个项目平台,以及解决方案配置Debug和Release有什么区别?这个问题一定有许多的困惑,甚至不乏一些已经工作了很久的老程 ...

  3. 一个很简单的基于栈式过程虚拟机的实现,它运行目标平台【x86】的原生代码。

    本文提供的 "栈式过程虚拟机" 的实现,挂在本人的 github 上面,对想要深入了解 "栈式过程虚拟机" 的人,它或许可以起到一个不错的作用,但是本人建议一般 ...

  4. 关于VS项目平台的x86,x64,Any CPU以及Debug和Release的区别

    相信对于很多刚接触打包程序的同志来说,关于x86,x64,Any CPU这三个项目平台,以及解决方案配置Debug和Release有什么区别?这个问题一定有许多的困惑,甚至不乏一些已经工作了很久的老程 ...

  5. 目标CPU中的“anyCPU”“x86”“x64”“Itanium”区别

    AnyCPU选项生成平台无关程序集.一个通过AnyCPU选项编译的程序集可毫无问题地运行在x86.x64及Itanium平台上,而生成的程序集基于PE32格式... x86选项用于生成特定于32位In ...

  6. C#基础教程(十三) VS平台与目标平台

    平时开发C#时候,经常会遇到这个错误,其他信息: 未能加载文件或程序集"32BitLib, Version=1.0.0.0, Culture=neutral,PublicKeyToken=n ...

  7. vs项目属性中目标平台x86,x64,any cpu的区别

    一.Any CPU平台下 编译出来的exe(可执行文件)或dll(动态链接库)是兼容的,取决于当前的操作系统,若操作系统是32位的,则编译出来的程序会以32位的软件模式运行,而在64位操作系统下则会以 ...

  8. VS x86 x64 anycpu 编译运行对照表

    VS x86 x64 anycpu 编译运行对照表

  9. C#编译器选项(目标平台)

    用vs编译C#项目的设置中,"属性-生成-目标平台"有anycpu,x86,x64等选项. anycpu(默认值)将编译程序集为使其在任意平台上都可以运行. 在任何可能的时候,应用 ...

最新文章

  1. java join()源码_Java Thread的join() 之刨根问底
  2. PHP的CI框架流程基本熟悉
  3. 阿里双十一秒杀系统架构设计,有哪些技术关键点?
  4. ng的link和comepile
  5. mysql提供了表示日期和时间的数据类型_MySQL数据类型 - 日期和时间类型(1)
  6. ASP.NET MVC5+EF6+EasyUI 后台管理系统(90)-EF 扩展操作
  7. 1.7 试探法(回溯法)
  8. model.train() model.eval()
  9. PHP连接MySQL查询结果中文显示乱码问题
  10. 屏蔽csdn右下角广告插件
  11. 【我的Android进阶之旅】APK反编译教程和工具下载
  12. 安卓模拟ibeacon_Android BLE-iBeacon系列(二)扫描识别iBeacon设备
  13. 研究生实证论文数据经验分享
  14. 借鉴美团文章实现的动态线程池,已开源
  15. vue各类轮播图大全
  16. 计算机一个字节是几位,电脑的一个字节等于多少位??
  17. 【plotly】ImportError: The plotly.plotly module is deprecated, please install the chart-studio package
  18. PHP 导出excel表格的3种方法
  19. matlab 音乐信号处理,基于matlab的音乐信号处理和分析.doc
  20. Cadence Allegro如何制作椭圆形通孔焊盘?

热门文章

  1. UE4学习-新建C++组件、编码遇到问题
  2. IntelliJ IDEA 使用Maven工具 (新手入门简单操作,maven的下载,安装,配置)
  3. mysql 备库,高性能MySQL:主库、分发主库以及备库
  4. vm服务器虚拟化如何漂移,解决虚拟机漂移问题的自动化网络管理
  5. EA出品的java射击类游戏,盘点五款射击类RPG游戏:你喜欢这类型游戏吗?
  6. java 脚手架_肝了一个半月的 Java 项目快速开发脚手架:Chewing
  7. 小米笔记本充电实测追求速度牺牲兼容性小米笔记本充电驱动_是海尔?也是雷神?不足1千克MixBook Air超轻薄笔记本...
  8. 五金手册在线查询_带剔除在线分选秤 零食袋装称重剔除秤-技术文章
  9. 电压kV为什么k要小写,原因你知道吗?
  10. 中国地质大学计算机考研录取名单,中国地质大学考研拟录取名单2021公布在哪里?什么时候公布?...