C# 任何CPU-首选32位

C# 任何CPU-首选32位,c#,visual-studio-2012,C#,Visual Studio 2012,“任意CPU首选32位”选项的作用是什么 虽然我知道WinRT不能处理exe,只能运行Windows应用商店应用程序,但有几个问题提出了相同的问题,两个问题都提到了以下内容: 在.NET4.5和VisualStudio11中,奶酪被移动了。默认值 对于大多数.NET项目来说,仍然是AnyCPU,但有不止一个 现在对任何CPU都有意义。AnyCPU还有一个子类型,“Any CPU 32位首选”,这是新的默认设置(总的来说,有 现在/platform C#编译器开关有五个选项:x86、安腾、, x6

“任意CPU首选32位”选项的作用是什么

虽然我知道WinRT不能处理exe,只能运行Windows应用商店应用程序,但有几个问题提出了相同的问题,两个问题都提到了以下内容:

在.NET4.5和VisualStudio11中,奶酪被移动了。默认值 对于大多数.NET项目来说,仍然是AnyCPU,但有不止一个 现在对任何CPU都有意义。AnyCPU还有一个子类型,“Any CPU 32位首选”,这是新的默认设置(总的来说,有 现在/platform C#编译器开关有五个选项:x86、安腾、, x64、anycpu和anyCPU32位(首选)。当使用那种味道的 在AnyCPU中,语义如下所示:

  • 如果进程在32位Windows系统上运行,则它将作为32位Windows系统运行 过程IL编译为x86机器代码
  • 如果进程在64位Windows系统上运行,则它将作为32位Windows系统运行 过程IL编译为x86机器代码
  • 如果进程在ARM Windows系统上运行,它将作为32位进程运行。IL被编译为ARM机器代码。
然而,在购买Surface RT之后,我创建了一个Hello World程序,将其设置为任何CPU,检查首选32位标志,编译并复制到我的Surface。当我运行该程序时,操作系统告诉我它无法运行该程序,我应该像对待任何x86/x64 exe一样关注市场。显示的确切消息是:“此应用无法在您的电脑上运行。若要查找此电脑的应用,请打开Windows应用商店。”


那么,这实际上是做什么的呢?是否可以为ARM上的Window RT编译任何CPU应用程序?

仅基于您指定的引用,它表示以下含义:

  • 如果CPU支持32位处理,那么最终的机器代码将是32位(ARM或x86不重要)

  • 如果不是,则机器代码将为64位

在过去,AnyCPU的意思是“我是平台不可知论者”。这通常意味着在64位平台上可以得到64位,在其他平台上可以得到32位

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

现在,使用AnyCPU-首选32位,您可以吃蛋糕(必要时支持64位),也可以吃蛋糕(可能时支持32位)

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


免责声明:我不是专家,这只是我在过去6个月左右读到的各种博客文章中的内容,Windows RT需要对exe文件进行签名才能运行。但如果您选择RT,则只要Windows on ARM(.NET或本机ARM)应用程序支持,RT就可以运行任何exe文件


有关此选项的更多信息,请参见

操作系统告诉您无法运行该程序的原因是什么?是由于CPU不兼容,还是其他原因?更新问题。显示的确切消息是:“此应用程序无法在您的电脑上运行。若要查找此电脑的应用程序,请打开Windows应用商店。”尝试运行其他exe(如Chrome安装程序)时会显示相同的消息。Windows RT无法运行桌面应用程序(正常的.exe文件)。您必须创建一个marketplace应用程序才能在表面上运行。@m0sa:正确,这也是我的理解。然而,当我提到博客帖子和StackOverflow问题时,我决定研究一下任何CPU-32位首选的实际功能。这篇博文在互联网和StackOverflow上的几个地方都被引用,因此,我试图确定它是否有一些优点。只要获得开发者许可证:这样你就可以将你的应用程序部署到你的机器上W64是服务器上的可选安装如果用户有一天可以选择是否内存不足,只想让应用程序针对小数据运行,那么32位就足够了,再过一天,他就可以运行完全支持64位的AnyCPU应用程序了。或者使用DirectShow(或其他类似框架)的应用程序可以(将!)在使用x86或x64时表现完全不同。但我的理解是,Ia64与常规x64不兼容——你必须特别针对Ia64,对吗?关于是先使用32位还是先使用64位的争论还没有真正好的答案。双方都有利弊,因为64位处理器处理64位变量的速度比32位变量快,但它们占用更多内存等等。“奶酪已经被移动了”——链接到提出这个问题的博客帖子可能会造成堆栈溢出;-)