任何CPU – 首选32位

Any CPU – 首选32位选项有什么作用?

虽然我知道WinRT无法处理exe并且只能运行Windowsapp store应用,但StackOverflow上存在几个问题,它们提出同样的问题并且都引用了这个博客 :

在.NET 4.5和Visual Studio 11中,奶酪已被移动。 大多数.NET项目的默认设置是AnyCPU,但现在AnyCPU有多个含义。 还有一个额外的子类型AnyCPU,“任何CPU 32位首选”,这是新的默认值(总体而言,/ platform C#编译器交换机现在有五个选项:x86,Itanium,x64,anycpu和anycpu32bitpreferred )。 使用AnyCPU的那种风格时,语义如下:

  • 如果进程在32位Windows系统上运行,则它将以32位进程运行。 IL编译为x86机器代码。
  • 如果进程在64位Windows系统上运行,则它将以32位进程运行。 IL编译为x86机器代码。
  • 如果进程在ARM Windows系统上运行,则它将以32位进程运行。 IL编译为ARM机器代码。

但是,购买Surface RT后,我创建了一个Hello World程序,将其设置为Any CPU,检查Prefer 32 Bit标志,编译并将其复制到Surface。 当我运行该程序时,操作系统告诉我,它无法运行该程序,我应该像任何x86 / x64 exe一样关注市场。 显示的确切消息是:“此应用程序无法在您的PC上运行。要查找此PC的应用程序,请打开Windowsapp store。”

那么这实际上做了什么,是否可以在ARM上为Window RT编译Any CPU应用程序?

仅根据您指定的报价,它表明它意味着以下内容:

  • 如果CPU支持32位处理,那么最终的机器代码将是32位(ARM或x86,无所谓)。

  • 如果没有,那么机器代码将是64位。

在旧时代,AnyCPU意味着“我与平台无关”。 这通常意味着您将在64位平台上获得64位,否则将获得32位。

但是,有理由说你甚至需要在64位CPU上使用32位:指针大小只有一半,所以你使用的内存更少; 代码较小,因此更适合缓存等。但是,没有办法强制CLR使用32位,并且在必要的情况下仍然保留64位。

现在,使用AnyCPU – 32位首选,你可以拥有你的蛋糕(必要时支持64位)并吃掉它(尽可能支持32位)

注意:如果我没有记错,Itanium将是一个只支持64位而不是32位代码的平台。 其他人可能有也可能没有。

免责声明:我不是专家,这只是我在过去6个月左右阅读过的各种博文

Windows RT需要签署exe文件才能运行。 但是如果你越狱你的RT然后它可以运行任何 exe文件,只要它在Windows(ARM或本机ARM)应用程序上的Windows上受支持

有关What AnyCPU真正意味着.NET 4.5和Visual Studio 11的更多选项