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

原创 2014年04月08日 09:26:39

      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 编译的程序集将在 64 位 CLR 上执行。

用 anycpu 编译的可执行文件将在 64 位 CLR 上执行。

用 anycpu 编译的 DLL 将在与加载它的进程相同的 CLR 上执行。

 

在 32 位 Windows 操作系统上:

用 x86或anycpu 编译的程序集将在 32 位 CLR 上执行。

用 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位系统上运行,记得安装开发工具是要自己勾选上,默认是不安装的。



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

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

如何理解.NET开发中的x86/x64/AnyCPU

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

C#中Any CPU和X86和X64平台的差异对比

最近在C#项目中嵌入一个视频软件Ffplayer,出现报错现象,提示平台开发视频.dll文件的兼容性和加载格式不正确的问题。最终查看是由于项目平台选择的是Any CPU和X86的引起的。目标平台有什么...
  • qq_30507287
  • qq_30507287
  • 2016年06月11日 09:17
  • 4915

Sqlite AnyCPU 不需要C++运行环境

  • 2014年06月26日 17:51
  • 994KB
  • 下载

面向AMD64的文件xxx与项目的目标平台x86不兼容

错误:面向“AMD64”的文件“xxxxx”与项目的目标平台“x86”不兼容今天在发布项目的时候,把项目平台由“x86”改成了“x64”位,就发生了以上错误!于是检测项目属性里项目平台是否为“x86”...
  • zuguangboy
  • zuguangboy
  • 2016年05月09日 18:38
  • 2949

关于NET编译的目标平台(AnyCpu,x86,x64)

背景 今天在运行项目的时候出现了这样一个错误 这个错误挺常见的,但是LYZJ.UserLimitMVC.UI.Portal对于LYZJ.UserLimitMVC.BLL的引用没有问题,而且LY...
  • u013036404
  • u013036404
  • 2016年01月28日 12:03
  • 1076

关于编译平台anycpu的问题

原本以为anyCPU编译的方式可以自动适配64位和32位的系统,然后最近在做一个项目的时候发现编译平台选择的anycpu,但是程序在64位的机器上跑就直接崩溃了;一开始怀疑是oracle的问题,装了一...
  • u013944260
  • u013944260
  • 2017年02月09日 09:33
  • 407

编译anycpu 引用X86或X64问题

1.宿主程序(main方法)使用anycpu编译运行 2.引用的dll使用了三方C/C++dll,只能使用X86/X64编译.此时生成时会提示"编译框架不匹配,可能无法使用".并且主程序运行时报"未...
  • pehao
  • pehao
  • 2017年07月21日 12:18
  • 382

仅当使用 Microsoft .NET Framework 4 或更高版本时,才支持对 x64 进程进行混合模式调试

低于 4 的 .NET Framework 版本不支持对 x64 进程进行混合模式调试。 这意味着,当您进行调试时,无法从托管代码单步执行到本机代码,也无法从本机代码单步执行到托管代码。 问...
  • kingmax54212008
  • kingmax54212008
  • 2015年01月06日 15:34
  • 3191

VS+2013 win7 64配置

 转载自 http://blog.csdn.net/tfy1028/article/details/8660823 win7  64位系统下,安装的VS2013,然后搭配opencv2.4...
  • Bettyshasha
  • Bettyshasha
  • 2015年11月12日 18:10
  • 838
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于.NET编译的目标平台(AnyCPU,x86,x64)
举报原因:
原因补充:

(最多只允许输入30个字)