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

10 篇文章 0 订阅
4 篇文章 0 订阅

一、x86、x64、Any CPU的区别 

1、在VisualStudio中,在编译设置中有如下选项:

编译(目标)平台含义
x86将程序集编译为由兼容 x86 的 32 位公共语言运行库运行;
x64将程序集编译为由支持 AMD64 或 EM64T 指令集的计算机上的 64 位公共语言运行库运行;
AnyCPU(默认值)将程序集编译为在任意平台上运行。

2、具体行为如下:

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上运行

说明:

① 简单的说,它们之间最直接的区别就是:x86平台编译出来的exe(可执行文件)或dll(动态链接库)都是32位的。以此类推,x64对应的则是64位的。而Any CPU则是取决于当前的操作系统,若操作系统是32位的,则编译出来的程序就是32位的,反之编译出来的就是64位程序。
② 若启动项目,即主程序(编译出来是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位的主程序调用。这是因为由Any CPU编译出来的dll则取决于调用它的主程序,即若主程序是32位的,那么dll也是32位的,若主程序是64位的,那么dll就是64位的。所以dll一般采用Any CPU平台编译,而主程序一般采用x86平台编译。

使用x86平台调试的时候,是可以一边调试一边修改代码的,而x64平台下则不行(启用了编辑并继续的)。

一般来说,在不清楚目标电脑是什么类型的操作系统的情况下,或者两者都有的时候,则主程序采用x86平台编译,dll采用Any CPU平台编译。若清楚地知道是64位操作系统,那么就可以都按x64平台编译了。

二、Debug和Release的区别

  1. Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。所以一般都是用Release来打包发布程序,另外,Release打包出来的程序也相对来说会小一些。

  2. 在Release模式下是不能一边调试一边修改代码的(启用了编辑并继续的)。

 

参考链接:

https://blog.csdn.net/qq_30507287/article/details/51635401

http://www.timegowhere.com/post/about_vs_targetplatform.html

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值