• .Net编译环境x86,x64,anycpu的区别


    一、定义

    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 编译的程序集无法运行。

    三、AnyCPU(Prefer 32-bit)(看了waterlv,大水哥的博文)

    这是在右击属性,选择首选32位才会使用的方法,必须使用 .net framework 4.5 以上才可以使用。在这个编译下,程序运行都是 32 位。

    在 32 位系统下,运行 32 位程序

    在 64 位系统下,运行 32 位程序,但是可以获得 4G 内存

    在 ARM 下,运行 32 位程序

    如果使用 AnyCPU 那么编译为 IL 是不需要加平台,程序在机器运行才判断机器平台,自动编译为机器可以运行的程序。

    那么 AnyCPU(Prefer 32-bit) 和 x86 有什么区别?实际上在 ARM 系统,只能使用 AnyCPU(Prefer 32-bit) 运行 32 位程序,如果选择 x86 就无法运行。

    为什么需要在 64 位的设备使用 AnyCPU(Prefer 32-bit),因为如果存在一些库只能在 32位程序运行,那么就需要运行的程序是 32 位,所以需要使用这个方法。

    如果在运行的时候,如何判断当前的系统版本?

    可以使用 Environment 来判断,Environment.Is64BitProcess 可以判断当前的程序运行的是 32 还是 64 ,通过 Environment.Is64BitOperatingSystem 可以判断系统

    那么如何判断一个 dll 是 x86 还是 any cpu?

    可以打开开发者命令,然后输入 corflags 判断,开发者命令一般如果是安装 vs2017 就是Developer Command Prompt for VS 2017,通过开始就可以找到。

    corflags lindexi.dll

    看输出,就可以知道这个库是什么

    Any CPU:

    PE: PE32 32BIT: 0

    x86:

    PE: PE32 32BIT: 1

    x64:

    PE: PE32+ 32BIT: 0

    四、其他编译选择

    • anycpu 默认的编译
    • anycpu32bitpreferred 在 .NET Framework 4.5 和以上才可以使用
    • ARM 程序编译为 ARM 运行
    • x64
    • x86
    • Itanium

    如果使用命令编译,那么可以使用platform和字符串

    csc /platform:anycpu filename.cs  
  • 相关阅读:
    Hard Rock
    Codeforces Round #416 (Div. 2) B. Vladik and Complicated Book
    codeforces 793B. Igor and his way to work
    codeforces 1B Spreadsheets
    HDU 1069 Monkey and Banana
    codeforces 2B The least round way
    【机器学习】 通俗说拟合
    python-八皇后问题
    python-核心知识思维导图
    python-@property 属性
  • 原文地址:https://www.cnblogs.com/xietianjiao/p/11599117.html
Copyright © 2020-2023  润新知