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


版权声明:本文为CSDN博主「苏怡仙-Hart」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/syx8821/article/details/80876837

当出现一个错误:“未能加载文件或程序集 或它的某一个依赖性,上百度查说要把项目的目标平台改成×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。

原文地址:https://www.cnblogs.com/youyouqiao/p/11878433.html