“首选 32 位”编译器标志对 Visual Studio(C#、VB)意味着啥?

Posted

技术标签:

【中文标题】“首选 32 位”编译器标志对 Visual Studio(C#、VB)意味着啥?【英文标题】:What does the "Prefer 32-bit" compiler flag mean for Visual Studio (C#, VB)?“首选 32 位”编译器标志对 Visual Studio(C#、VB)意味着什么? 【发布时间】:2011-11-22 11:08:49 【问题描述】:

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

这个标志表示什么?

【问题讨论】:

你应该参考这篇文章,blogs.microsoft.co.il/blogs/sasha/archive/2012/04/04/… What is the purpose of the "Prefer 32-bit" setting in Visual Studio and how does it actually work?的可能重复 @DaveInCaz:它怎么可能是一个新问题的重复? @IvanH 根据 *** 指南,“一般规则是保留问题的最佳答案集合”meta.stackexchange.com/questions/10841/… 【参考方案1】:

这可能表明应用程序是 AnyCpu,但当 32 位可用时,它应该这样运行。这是有道理的 - 64 位应用程序使用更多内存,有时您只是不需要内存空间;)

【讨论】:

64 位应用程序也无法通过编辑和继续进行调试。设置“首选 32 位”有望使 x64 用户能够再次调试在 AnyCPU 上运行的应用程序,而无需将目标设置为 x86/32 位编译。 这不是正确的答案。请参考blogs.microsoft.co.il/blogs/sasha/archive/2012/04/04/… 那为什么不把它作为答案发布;-) @LexLi 是正确的,这个答案是错误的,从他们链接的文章中,“如果进程在 64 位 Windows 系统上运行,它作为 32 位进程运行。IL 编译为x86 机器代码。”、“那么,“任何 CPU 32 位首选”和“x86”之间的区别仅在于:编译为 x86 的 .NET 应用程序将无法在 ARM Windows 系统上运行,但“任何CPU 32 位首选”应用程序将成功运行。” Archive.org Link for now dead Microsoft article【参考方案2】:

编辑: 使用“任何 CPU 32 位首选”编译的应用程序与 x86、x64 和 ARM 兼容,而 x86 仅与 x86、x64 兼容,不兼容 ARM。详情见this。

【讨论】:

文章不是这么说的。再读一遍:a .NET application compiled to x86 will fail to run on an ARM Windows system, but an “Any CPU 32-bit preferred” application will run successfully. 感谢反馈,答案已更改。【参考方案3】:

What AnyCPU Really Means As Of .NET 4.5 and Visual Studio 11有一篇好文章。

对您的问题的简短回答是“当使用那种风格的 AnyCPU 时,语义如下:

如果进程在 32 位 Windows 系统上运行,它将作为 32 位进程运行。 IL 被编译为 x86 机器码。 如果进程在 64 位 Windows 系统上运行,则它作为 32 位进程运行。 IL 被编译为 x86 机器码。 如果进程在 ARM Windows 系统上运行,它将作为 32 位进程运行。 IL 被编译为 ARM 机器码。 那么,“任何 CPU 32 位首选”和“x86”之间的区别仅在于:编译为 x86 的 .NET 应用程序将无法在 ARM Windows 系统上运行,但“任何 CPU 32 位首选”应用程序将无法运行将成功运行。”

【讨论】:

你回答的内容是对的,但是我很好奇,你为什么把原文章中漂亮的项目符号列表格式去掉了?【参考方案4】:

这是正确而简单的答案:

【讨论】:

以上是关于“首选 32 位”编译器标志对 Visual Studio(C#、VB)意味着啥?的主要内容,如果未能解决你的问题,请参考以下文章

CMake - 构建没有首选 32 位标志的 C#

为啥在 Visual Studio 2012 中禁用了“首选 32 位”复选框?

任何 CPU - 首选 32 位

面向 XP 的 Visual Studio 2013 的 Visual C++ 编译器标志

Visual Studio 编译器标志 /arch 和性能

Visual Studio C++ 编译器标志:-Zm200 是啥?