“首选 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)意味着啥?的主要内容,如果未能解决你的问题,请参考以下文章
为啥在 Visual Studio 2012 中禁用了“首选 32 位”复选框?