任何CPU - 首选32位

时间:2012-10-31 01:13:21

标签: c# visual-studio-2012

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

虽然我知道WinRT无法处理exe并且只能运行Windows应用商店应用,但exist上有几个问题StackOverflow提出了同样的问题并且都引用了此blog那说:

  

在.NET 4.5和Visual Studio 11中,奶酪已被移动。默认   对于大多数.NET项目来说,AnyCPU也是如此,但不止一个   现在意味着AnyCPU。还有一个额外的AnyCPU子类型,“Any   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的应用程序,请打开Windows应用商店。”

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

2 个答案:

答案 0 :(得分:16)

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

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

  • 如果没有,则机器代码为64位。

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

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

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

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

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

答案 1 :(得分:1)

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

What AnyCPU Really Means As Of .NET 4.5 and Visual Studio 11

上有关此选项的更多信息
相关问题