“Prefer 32-bit”编译器标志对于Visual Studio(C#,VB)是什么意思?

28

我刚安装了Visual Studio 11开发者预览版。在使用AnyCPU目标编译托管(C#,VB)应用程序时,我看到了一个名为“Prefer 32-bit”的新选项在项目属性中。这似乎不是类库的选项,只适用于顶层应用程序。

这个标志表示什么?


1
你应该参考这篇文章,http://blogs.microsoft.co.il/blogs/sasha/archive/2012/04/04/what-anycpu-really-means-as-of-net-4-5-and-visual-studio-11.aspx - Lex Li
@DaveInCaz:它怎么可能是一个更新的问题的副本? - IvanH
2
根据StackOverflow的指导,“一般规则是保留答案最佳的问题” https://meta.stackexchange.com/questions/10841/how-should-duplicate-questions-be-handled - StayOnTarget
4个回答

11

这很可能表示该应用程序是AnyCpu,但当32位可用时,应以32位方式运行。这是有道理的- 64位应用程序使用更多内存,有时您只需要较小的内存空间 ;)


1
64位应用程序也无法使用编辑和继续进行调试。设置“首选32位”希望使x64用户能够再次调试在AnyCPU上运行的应用程序,而无需将目标设置为x86 / 32位编译。 - CodingBarfield
14
这不是正确的答案。请参考http://blogs.microsoft.co.il/blogs/sasha/archive/2012/04/04/what-anycpu-really-means-as-of-net-4-5-and-visual-studio-11.aspx。 - Lex Li
6
那为什么不把它发布为答案呢;-) - Dr. Andrew Burnett-Thompson
1
@LexLi是正确的,这个答案是错误的,从他们链接的文章中可以看出,“如果进程在64位Windows系统上运行,则它将作为32位进程运行。IL编译为x86机器代码。”因此,“Any CPU 32-bit preferred”和“x86”的区别仅在于:编译为x86的.NET应用程序将无法在ARM Windows系统上运行,但“Any CPU 32-bit preferred”应用程序将成功运行。 - jrh

2

以下是正确且简洁的答案:

应用程序架构


2

编辑: 使用“Any CPU 32 位优先”编译的应用程序与 x86、x64 和 ARM 兼容,而 x86 仅与 x86、x64 兼容,不与 ARM 兼容。有关详情,请参见此处


4
这并不是文章所说的。再读一遍:“一个编译为x86的.NET应用程序将无法在ARM Windows系统上运行,但一个“Any CPU 32-bit preferred”的应用程序将可以成功运行。” - Evgeniy Berezovsky
感谢您的反馈,答案已更改。 - Tomas Kubes

1

.NET 4.5和Visual Studio 11中AnyCPU的真正含义这篇文章中有很好的内容。

简短回答你的问题是:“使用这种类型的AnyCPU时,语义如下:

如果进程运行在32位Windows系统上,则作为32位进程运行。IL编译为x86机器码。 如果进程运行在64位Windows系统上,则作为32位进程运行。IL编译为x86机器码。 如果进程运行在ARM Windows系统上,则作为32位进程运行。IL编译为ARM机器码。 因此,“Any CPU 32位首选”和“x86”的区别仅在于:针对x86编译的.NET应用程序无法在ARM Windows系统上运行,但“Any CPU 32位首选”应用程序将成功运行。”


1
你的回答内容是正确的,但我很好奇为什么你删除了原始文章中漂亮的项目符号列表格式? - jrh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接