title author date CreateTime categories
WPF 编译为 AnyCPU 和 x86 有什么区别
lindexi
2018-08-10 19:16:53 +0800
2018-2-13 17:23:3 +0800
WPF

本文告诉大家,编译为 AnyCpu 和 AnyCPU(Prefer 32-bit)和 x86 有什么区别

x86

编译为 32 位的程序,如果程序运行的机器是 32 位还是 64 位,程序运行都是 32 位,但是如果在 ARM 下,x86 程序无法运行

AnyCPU

如果在 x86 系统下,运行就是 32 位程序,如果是 64 位系统下,运行就是 64 位程序。如果在 ARM 下运行,就是指定的 ARM 可以运行的程序。

AnyCPU(Prefer 32-bit)

这是在右击属性,选择首选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  

参见:https://stackoverflow.com/a/12066861/6116637

使 32 位程序使用大于 2GB 的内存 - walterlv

如果发现引用了 dll 出现了下面的错误

那么就需要检查是不是软件的环境和 dll 的环境不一样,如 软件是 x86 dll 是 x64就会出现这个问题。

如果 dll 不是 .net 的,那么可以使用下面的代码查看他环境

dumpbin /headers foo.dll

最新文章

  1. JVM学习(4)——全面总结Java的GC算法和回收机制
  2. BZOJ 2705: [SDOI2012]Longge的问题
  3. NSDICTIONARY获取内容的CRASH
  4. c语言学习的第6天
  5. linux服务器修改ftp默认21端口方法
  6. SDK编程模板
  7. Gnu Linux下文件的字符编码及转换工具
  8. Java设计模式之认识阶段
  9. apache动态添加模块
  10. 最小的 Velocity 教程
  11. 虚函数&多态
  12. java.lang.NoSuchMethodError:android.content.Context.getDrawable
  13. encode与decode
  14. Java中的常用集合类型总结
  15. yum与rpm常用命令
  16. makefile入门-初步了解
  17. Java 面向切面 AOP
  18. SpringBoot之集成Socket
  19. 小程序的get和post需要注意的地方
  20. linux信号的介绍

热门文章

  1. Matlab---length函数
  2. vim编辑shell
  3. odoo 8.0 多核启用
  4. 时序数据库连载系列: 时序数据库一哥InfluxDB之存储机制解析
  5. jeecms 基本架构研究
  6. Linux下安装jboss并设置自启动服务
  7. python基础--类的继承以及mro
  8. zk运维注意事项
  9. Python科学计算生态圈--Scipy
  10. 洛谷P1263 宫廷守卫