自.NET 4.5 和 Visual Studio 11 起,AnyCPU 究竟意味着什么

主要观点:Windows 上的 32 位和 64 位开发问题持续存在,64 位处理器出现已十年但仍存在问题。
关键信息

  • 64 位 Windows 系统中存储 32 位和 64 位系统 dll,64 位 dll 在 C:\windows\system32,32 位 dll 在 C:\windows\syswow64。
  • 32 位进程打开 C:\program files 中的文件实际读取/写入到 C:\program files (x86)。
  • 32 位和 64 位应用有不同的注册表视图,64 位注册表位置对 32 位应用不可见。
  • 托管代码有anycpu选项,.net 4.0 及之前在不同系统下编译不同代码,.net 4.5 及 Visual Studio 11 中默认是“any cpu 32 - bit preferred”,其语义与之前不同。
    重要细节
  • Visual Studio 2010 前多数.net 项目默认是 anycpu,在 64 位系统上运行时可能导致意外结果,如依赖 32 位 unmanaged dll 时 64 位版本无法加载。
  • Visual Studio 2010 中 x86 成为多数.net 项目默认,但语义未变。
  • 在“.net 4.5 和 Visual Studio 11”中,“any cpu 32 - bit preferred”默认,与 x86 的区别是能在 arm 系统上运行,而 x86 不能。
  • 通过创建新的 C#控制台应用并使用 corflags.exe 可查看相关属性和设置,如改变 32bitpref 设置后输出会改变。
阅读 9
0 条评论