ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

.NET目标平台×86、×64、AnyCUP的区别

2021-06-28 23:34:22  阅读:156  来源: 互联网

标签:32 平台 AnyCUP 编译 64 NET 86 CPU


 

https://www.zhihu.com/question/63040129?sort=created

在敲七层的时候出现一个错误:“未能加载文件或程序集 或它的某一个依赖性,上百度查说要把项目的目标平台改成×86,虽然改了问题也没有解决,但也顺便来学习一下目标平台×86、×64、AnyCUP的区别。

  

  ×86平台:

  强制生成的软件为32位软件,不管操作系统是32位还是64位都是以32位模式运行。

 ×64平台:

  强制生成的软件为64位软件,只能在64位模式运行

  AnyCUP:

  编译出来的exe或dll是兼容的,取决于当前的操作系统,若操作系统是32位的,则编译出来的程序会以32位的软件模式运行,而在64位操作系统下则以64位的软件模式运行。

具体行为如下:

  在64位Windows操作系统上:

  用×86编译的程序集将在WOW64下运行的32位CLR上执行。

  用×64编译的程序集将在64位CLR上执行。

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

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

  在32位Windows操作系统上:

  用×86或Any CPU编译的程序集将在32位CLR上执行。

  用×64编译的程序集无法运行。

若是程序平台选用不当,可能会报的一个错误是:“未能加载文件或程序集”下边来实践怎么才能选对。

出现这个错误是因为32位程序不能加载64位的dll,更不能调用其中的类、方法和对象等。即你有可能主程序(启动项目)是×86平台下编译的,是32位程序,依赖的项目是×64平台编译出来的,是64位dll文件。或者是主程序是×64平台编译,依赖项目是×86平台编译。(Any CPU编译出来的程序取决于操作系统,编译出来的dll取决于调用它的主程序。)

所以我们可以知道,在可编译的前提下,只要dll和主程序的生成平台一致就可以。如以下几种情况:

1、主程序是Any CPU、×86、×64平台编译的,依赖项目是Any CPU平台编译的。

2、主程序的编译平台和依赖项目的编译平台一样。

综上来说,一般情况下,dll常采用Any CPU平台编译,而主程序则看你的操作系统是多少位而选择×64或×86.

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/syx8821/article/details/80876837

标签:32,平台,AnyCUP,编译,64,NET,86,CPU
来源: https://blog.csdn.net/weixin_37991107/article/details/118314467

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有