【问题标题】:how to know which cpu to use in build (x86 x64 or AnyCpu)?如何知道在构建中使用哪个 cpu(x86 x64 或 AnyCpu)?
【发布时间】:2012-02-09 20:33:45
【问题描述】:

我使用的是 Windows 7 和 x64 处理器。 这是否意味着我应该始终在 Visual Studio 中使用“x64”选项进行编译?那么“dll”呢,我可以使用 x64 应用程序中的 x86 dll 吗?可能还有其他顾虑?

【问题讨论】:

    标签: c# .net visual-studio-2010


    【解决方案1】:

    This article 包含每个选项的简要概述。

    这里有一个小引述:

    默认设置 Any CPU 表示程序集将运行 本机在 CPU 上,它当前正在运行。意思是,它将运行 在 64 位机器上为 64 位,在 32 位机器上为 32 位。如果 从 64 位应用程序调用程序集,它将作为 64位汇编等等。

    如果项目设置为 x86,这意味着该项目旨在 仅作为 32 位进程运行。 64 位进程将无法调用 到一个装配集为 X86。将项目设置为 x86 的原因 包括对仅在 32 位或假设 32 位进行本机调用。应用程序和 标记为 x86 的程序集仍然可以在 64 位 Windows 上运行。然而 他们在WOW64下运行。 Visual Studio 本身在此仿真下运行 模式,因为它是一个 32 位应用程序。

    将项目设置为 x64 将指定程序集必须运行 在 64 位 Windows 下。尝试在 32 位上运行程序集 Windows 或从 32 位进程调用程序集将导致 运行时错误。

    【讨论】:

    • 如何确定 DLL 是否仅在 32 位中可用?另外,如何判断程序是否在假设 32 位的情况下进行本机调用?
    • @DanW,我建议发布一个问题。在 cmets 中问这样的问题不会让你走得太远。
    • 如果其他人也遇到这个问题,在这里更方便。无论如何,我认为this 会成功的。
    【解决方案2】:

    一般来说,你应该一直使用AnyCpu

    如果您有特定的理由预计会出现兼容性问题,那么您需要根据需要选择 x86 或 x64。

    如 cmets 中所述,针对特定体系结构构建的 dll 可能需要您以某种方式构建程序集。这将是您需要时想要做的事情,否则不会。

    【讨论】:

    • 当我使用 AnyCpu 应用程序时由于某种原因崩溃。 x86 选项有效...可能这是因为使用了 dll ..
    • 是的,例如,某些OleDbODBC 驱动程序只能在x86 模式下工作。
    • @javapowered 是的,如果您的 DLL 专门用于 x86 或 x64,请使用相应的。例如,我使用的是 x86 的 Oracle DB Access DLL,然后我需要在 x86 中编译。
    • 同意...看到Jet OLEDB的架构限制
    【解决方案3】:

    不...您编写代码/编译/构建软件(EXE,DLL...)的机器与目标(x86 / x64 / Any)的问题没有任何关系。

    如果您希望构建结果在您使用 x86 或 AnyCPU 的任何地方运行。如果您希望结果仅在 x64 上运行,则使用 x64。

    在某些情况下,您必须使用 x86 或 x64 - 也就是说,当您在项目中使用某些(第 3 方?)组件/库/DLL/ActiveX 等时,它们是仅 32 位(然后是 x86)或仅仅限 64 位(然后是 x64)。

    【讨论】:

      【解决方案4】:

      AnyCPU 是我通常推荐的。你可以在this SO post看到这个问题的深入讨论。

      唯一的问题是您不能倒退 - 您不能使用来自 x86 应用程序的 x64 程序集。 AnyCPU 缓解了这个潜在的陷阱。

      【讨论】:

        猜你喜欢
        • 2015-05-03
        • 2017-03-22
        • 1970-01-01
        • 1970-01-01
        • 2016-01-12
        • 1970-01-01
        • 2016-03-11
        • 1970-01-01
        • 2015-04-05
        相关资源
        最近更新 更多