关于.NET编译的目标平台(AnyCPU,x86,x64)
来源:互联网 发布:mac虚拟机怎么全屏 编辑:程序博客网 时间:2024/05/16 07:44
转载于:关于.NET编译的目标平台(AnyCPU,x86,x64))
1.关于.NET编译的目标平台(AnyCPU,x86,x64)(转)
今天有项目的代码收到客户的反馈,要求所有的EXE工程的目标平台全部指定成x86,而所有DLL工程的目标平台全部指定成AnyCPU
下面我们一起看看这个目标平台有什么作用,各选项有什么差别吧。
在VisualStudio中,在编译设置中有如下选项:
x86: 将程序集编译为由兼容 x86 的 32 位公共语言运行库运行。
x64: 将程序集编译为由支持 AMD64 或 EM64T 指令集的计算机上的 64 位公共语言运行库运行。
anycpu:(默认值)将程序集编译为在任意平台上运行。
Itanium: 将程序集编译为由采用 Itanium 处理器的计算机上的 64 位公共语言运行库运行。
具体行为如下:
在 64 位 Windows 操作系统上:
用 x86 编译的程序集将在 WOW64 下运行的 32 位 CLR 上执行。
用 x64
用 anycpu 编译的可执行文件将在 64 位 CLR 上执行。
用 anycpu 编译的 DLL 将在与加载它的进程相同的 CLR 上执行。
在 32 位 Windows 操作系统上:
用 x86或anycpu
用 x64
搞清楚这些差异以后,回过头来看看客户要求的东西,有没有道理吧。
首先有一点是知道的,客户希望程序能够在WINXP以上的各系统中运行(不管是32位还是64位)。
因此,不可能选x64,Itanium这种针对特殊处理器的也不会去选。
那都选择Any CPU这种默认方式有没有问题呢?
首先看看Any CPU和x86的可执行文件(EXE)在32位和64位下有什么区别吧,
Any CPU在32位下,EXE将以32位执行,而在64位下,EXE将以64位执行。而x86的话,始终以32位执行。
客户希望使用的x86,也就是不希望64位下用64位方式执行EXE程序。我分析的原因是由于系统中可能存在第三方的32位DLL,一旦使用64位执行的EXE,在调用到32位的DLL时,将无法调用。
而DLL,客户则希望采用Any CPU,我分析的原因是DLL的实际运行方式是受调用它的EXE所影响的,因此设为Any CPU就可以了。而如果设定为x86,虽然看似没什么问题,但其无法在64位CLR中运行了,不是太好。
参考资料:
http://msdn.microsoft.com/zh-cn/library/zekwfyz4(VS.80).aspx
注:以上文章虽好,但是我在做项目的时候,用any CPU编译的exe,调用64位系统上的dll的时候,总是调不起来,后来用x86编译的exe就可以调用64位系统上的dll。所以要是在64为系统上运行,用x86编译的是几乎都能运行的。
2.如果是c++程序在64位系统上运行,记得安装开发工具是要自己勾选上,默认是不安装的。
- 关于.NET编译的目标平台(AnyCPU,x86,x64)
- 关于.NET编译的目标平台(AnyCPU,x86,x64)(转)
- 关于.NET编译的目标平台(AnyCPU,x86,x64)
- 关于.NET编译的目标平台(AnyCPU,x86,x64)
- 关于NET编译的目标平台(AnyCpu,x86,x64)
- 关于.NET编译的目标平台(AnyCPU,x86,x64)(转)
- 关于.NET编译的目标平台(AnyCPU,x86,x64)(转)
- 关于.NET编译的目标平台(AnyCPU,x86,x64)
- 关于.NET编译的目标平台(AnyCPU,x86,x64)
- 关于.NET编译的目标平台(AnyCPU,x86,x64)
- 关于.NET编译的目标平台(AnyCPU,x86,x64)
- .NET编译的目标平台:AnyCPU,x86,x64
- 编译anycpu 引用X86或X64问题
- 关于编译平台anycpu的问题
- 目标CPU中的“anyCPU”“x86”“x64”“Itanium”区别
- .net 编译时选择anycpu x86 x64的区别: 在 64 位 Windows 操作系统上: 用 x86 编译的程序集将在 WOW64 下运行的 32 位 CLR 上执行。 用 x64 编译
- VS x86 x64 anycpu 编译运行对照表
- 如何理解.NET开发中的x86/x64/AnyCPU
- Service的启动、绑定、传递数据
- gitlab入门教程
- FieldSet的使用--在数据周围绘制一个带标题的框
- kettle 闪退的处理
- Python入门:列表、字典拆分参数
- 关于.NET编译的目标平台(AnyCPU,x86,x64)
- Android Fragment中startActivityForResult不执行回调。
- c++文件流的基本操作
- 字符串转字典类型
- GeoServer配置图层按比例尺显示和隐藏
- 通过poi解析Excel示例
- android 加入so包
- Web_Cookie/Session机制详解
- Qt一个很烂的2048游戏