zoukankan      html  css  js  c++  java
  • .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。

  • 相关阅读:
    委托的BeginInvoke和EndInvoke
    HTTP Post
    显示一个托盘
    sql语句
    在C++ 中 如何调用 C# 写的DLL(转载)
    WinForm-MenuStrip
    rsync定时同步和rsync+sersync实时同步
    innobackupex自动备份数据库脚本
    innobackupex备份恢复mysql
    gitlab安装和基本使用
  • 原文地址:https://www.cnblogs.com/youyouqiao/p/11878433.html
Copyright © 2011-2022 走看看