【发布时间】:2012-02-09 20:33:45
【问题描述】:
我使用的是 Windows 7 和 x64 处理器。 这是否意味着我应该始终在 Visual Studio 中使用“x64”选项进行编译?那么“dll”呢,我可以使用 x64 应用程序中的 x86 dll 吗?可能还有其他顾虑?
【问题讨论】:
标签: c# .net visual-studio-2010
我使用的是 Windows 7 和 x64 处理器。 这是否意味着我应该始终在 Visual Studio 中使用“x64”选项进行编译?那么“dll”呢,我可以使用 x64 应用程序中的 x86 dll 吗?可能还有其他顾虑?
【问题讨论】:
标签: c# .net visual-studio-2010
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 位进程调用程序集将导致 运行时错误。
【讨论】:
一般来说,你应该一直使用AnyCpu。
如果您有特定的理由预计会出现兼容性问题,那么您需要根据需要选择 x86 或 x64。
如 cmets 中所述,针对特定体系结构构建的 dll 可能需要您以某种方式构建程序集。这将是您需要时想要做的事情,否则不会。
【讨论】:
OleDb 和ODBC 驱动程序只能在x86 模式下工作。
不...您编写代码/编译/构建软件(EXE,DLL...)的机器与目标(x86 / x64 / Any)的问题没有任何关系。
如果您希望构建结果在您使用 x86 或 AnyCPU 的任何地方运行。如果您希望结果仅在 x64 上运行,则使用 x64。
在某些情况下,您必须使用 x86 或 x64 - 也就是说,当您在项目中使用某些(第 3 方?)组件/库/DLL/ActiveX 等时,它们是仅 32 位(然后是 x86)或仅仅限 64 位(然后是 x64)。
【讨论】:
AnyCPU 是我通常推荐的。你可以在this SO post看到这个问题的深入讨论。
唯一的问题是您不能倒退 - 您不能使用来自 x86 应用程序的 x64 程序集。 AnyCPU 缓解了这个潜在的陷阱。
【讨论】: