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。

  • 相关阅读:
    LeetCode 230. Kth Smallest Element in a BST
    LeetCode 114. Flatten Binary Tree to Linked List
    LeetCode 222. Count Complete Tree Nodes
    LeetCode 129. Sum Root to Leaf Numbers
    LeetCode 113. Path Sum II
    LeetCode 257. Binary Tree Paths
    Java Convert String & Int
    Java Annotations
    LeetCode 236. Lowest Common Ancestor of a Binary Tree
    LeetCode 235. Lowest Common Ancestor of a Binary Search Tree
  • 原文地址:https://www.cnblogs.com/youyouqiao/p/11878433.html
Copyright © 2011-2022 走看看