关于VS项目平台的x86,x64,Any CPU以及Debug和Release的区别
相信对于很多刚接触打包程序的同志来说,关于x86,x64,Any CPU这三个项目平台,以及解决方案配置Debug和Release有什么区别?这个问题一定有许多的困惑,甚至不乏一些已经工作了很久的老程序猿来说都是一个模棱两可的问题。当然,我也是捣腾了好久,才渐渐搞明白它们的区别,以此作个总结:
一 、x86、x64、Any CPU的区别
1.简单的说,它们之间最直接的区别就是:x86平台编译出来的exe(可执行文件)或dll(动态链接库)都是32位的。以此类推,x64对应的则是64位的。而Any CPU则是取决于当前的操作系统,若操作系统是32位的,则编译出来的程序就是32位的,反之编译出来的就是64位程序。
2.若你的启动项目,即主程序(编译出来是exe文件的)是x86平台下编译的,而它所依赖的一个项目(或动态链接库)是由x64位平台编译出来的,则会提示“未能加载文件或程序集…或它的某一个依赖性。试图加载格式不正确的程序。”之类的错误。这是因为32位程序不能加载64位的dll,更不能调用其中的类、方法和对象等。反之,若主程序是由x64平台编译出来的,而dll是x86的呢?答案。。也是不行的!说到这里,基本上可以确定一点:dll和主程序的生成平台只要一致就可以。那么问题来了!若主程序是Any CPU编译的,而dll是由x86或者x64平台编译的,又或者,主程序是x86或者x64平台编译的,而dll是由Any CPU编译的呢?正确答案就是两者在“特殊情况”下都是可行的。为什么说是“特殊情况”下呢?因为第一点(红色字体处)也提到了,Any CPU取决于操作系统,而结合第二点上半部分(红色字体处)提到的,只要dll和主程序的生成平台一致,那么也是可行的。所以,由上可知:若主程序是在Any CPU平台下编译的,那么编译dll的平台必须要和编译主程序的操作系统一致才行。若主程序是在x86或者x64平台下编译的,那么dll就必须要和主程序一致。不过有个特例:若dll由Any CPU编译的,那么这个dll就可以被32位和64位的主程序调用。这是为什么呢?请看第三点。
3.虽说Any CPU编译出来的程序取决于操作系统,但是由Any CPU编译出来dll则取决于调用它的主程序,即若主程序是32位的,那么dll也是32位的,若主程序是64位的,那么dll就是64位的。所以dll一般采用Any CPU平台编译,而主程序一般采用x86平台编译。
使用x86平台调试的时候,是可以一边调试一边修改代码的,而x64平台下则不行(启用了编辑并继续的)。如下图:
调试时修改代码提示如下:
总结:了解了它们的区别之后,我们打包程序的时候就知道如何取舍了。一般来说,在不清楚客户的电脑是什么类型的操作系统的情况下,或者两者都有的时候,则主程序采用x86平台编译,dll采用Any CPU平台编译。若清楚的知道是64位操作系统,那么就可以都按x64平台编译了。
二、Debug和Release的区别
Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。所以一般都是用Release来打包发布程序,另外,Release打包出来的程序也相对来说会小一些。
在Release模式下是不能一边调试一边修改代码的(启用了编辑并继续的)。调试时修改代码提示如下图:
以上便是我对它们的理解,若有说的不对的欢迎指正,若有不足的欢迎补充!
原文链接:
http://www.timegowhere.com/post/about_vs_targetplatform.html
关于VS项目平台的x86,x64,Any CPU以及Debug和Release的区别相关推荐
- 关于VS项目平台的x86,x64,Any CPU以及Debug和Release
相信对于很多刚接触打包程序的同志来说,关于x86,x64,Any CPU这三个项目平台,以及解决方案配置Debug和Release有什么区别?这个问题一定有许多的困惑,甚至不乏一些已经工作了很久的老程 ...
- vs项目属性中目标平台x86,x64,any cpu的区别
一.Any CPU平台下 编译出来的exe(可执行文件)或dll(动态链接库)是兼容的,取决于当前的操作系统,若操作系统是32位的,则编译出来的程序会以32位的软件模式运行,而在64位操作系统下则会以 ...
- 关于.NET编译的目标平台(AnyCPU,x86,x64) (转)
关于.NET编译的目标平台(AnyCPU,x86,x64)(转) 今天有项目的代码收到客户的反馈,要求所有的EXE工程的目标平台全部指定成x86,而所有DLL工程的目标平台全部指定成AnyCPU . ...
- 关于.NET编译的目标平台(AnyCPU,x86,x64)
在VisualStudio中项目平台属性包含x86/x64/AnyCPU三个选项,之前的项目中并没有特别去关注这一点,最近的项目中涉及到了在不同平台运行的问题,所以专门了解并整理了这方面的知识. x8 ...
- Win10+VS2015平台下OpenCV3.1.0的x86和x64平台的Debug与Release模式的编译与配置
闲话 昨天晚上在新电脑上重新配置了OpenCV3.1,之前虽然也弄过,不过当时是初学者,只是照着网上的教程简单的配置了Debug模式下x86的运行环境(大部分的教程也只教了这种方式的配置......) ...
- 项目发布Debug和Release版的区别
https://www.cnblogs.com/taiyonghai/p/6126074.html 一.Debug和Release的区别 Debug:调试版本,包含调试信息,所以容量比Release大 ...
- 嵌入式开发 | 软件项目中 Debug 和 Release 版本的差异
关注+星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | strongerHuang 很多集成开发环境(IDE),比如VS(VC).IAR等,在创建工程时都会自动生成有D ...
- 软件项目中Debug 和 Release版本差异
关注+星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | 嵌入式专栏 有很多软件集成开发环境(IDE),比如VS(VC).IAR等,在创建工程时都会自动生成有Debug ...
- vs2015 x86的Qt项目迁移到vs2017 x64平台
今天用vs打开别人给的qt工程,发现版本不一致,弹了一个"重定向项目"的对话框. 我的配置是vs2017+Qt 5.9.7_msvc_x64,显然,点了确定后点生成是不会成功的,会 ...
最新文章
- NLP诗词生成模型数据准备及实战
- c# asp.net core取当月第一天和最后一天及删除最后一个字符的多种方法
- 编写干净的测试–提防魔术
- java.lang.classnotfo_java.lang.ClassNotFoundException
- java打印菱形图案
- FastCGI 工作原理
- 多租户数据架构以及hibernate支持(Multi-TenantDataArchitecture)
- #include <iostream> C++ Hello World!
- WiFi产品的一般射频电路设计
- 2007年会计从业资格练习第三章会计科目和账户
- 毕业论文学术报告答辩开题报告PPT模板
- 中国视频云千亿市场,阿里云四年稳居“第一”
- java oracle sqlldr,oracle sqlldr
- Unrecogized font family ‘Ionicons’ 在ios上报错,android正常
- 软件开发人员应该了解测试和QA
- 【优化求解】基于天牛须算法PID控制器优化设计matlab代码
- aardio部署_GitHub - wiseshrek/aardio-erp: aardio10开发企业管理系统:aardio-erp框架源码
- nodejs-指定长度断句
- 来点硬件知识,给笔记本加固态硬盘
- YTU 1906 鹊桥相会