【问题标题】: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 位”的新选项。这似乎不是类库的选项,只是顶级应用程序。

这个标志表示什么?

【问题讨论】:

标签: c# vb.net compiler-flags visual-studio-2012


【解决方案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 位首选”应用程序将成功运行。”
【解决方案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】:

这是正确而简单的答案:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 2011-01-02
    • 2021-07-22
    • 1970-01-01
    • 2015-12-08
    • 2019-10-04
    相关资源
    最近更新 更多