为什么“任何CPU”应用程序在x64机器上以x86方式运行?

15

我安装了一个 任意 CPU 应用程序到“Program Files (x86)”文件夹。在一个 Windows 7 x64 机器上,该程序按预期以 x64 运行,而在另一台 Windows 7 x64 机器上,它以 x86 运行!

这是怎么回事?我希望它在两台机器上都以 x64 运行。可能的原因是什么?我该如何让它始终以 x64 运行?

我从哪里运行它是否有影响 - 在我这种情况下是从“Program Files(x86)”文件夹运行?


1
程序是否在两台机器上的“Program Files(x86)”文件夹中? - Will A
1
@WillA 程序所在的位置并不重要。32位程序可以存储在“\Program Files”中,而64位程序可以存储在“\Program Files (x86)”中。它们都将被正确加载,因为指令集信息已经写入头文件中。 - phuclv
1个回答

13

很可能您链接了一些不是 Any CPU,但包含本地代码(或以x86编译)的程序集,这会导致整个进程回退到x86。

要了解您的程序集如何编译,一个相关的 Stack Overflow 问题可能会有所帮助:如何确定 .NET 程序集是为 x86 还是 x64 构建的?*。

注意:可执行文件在文件系统上的位置完全无关紧要。


2
但是,它是如何在另一台机器上以x64运行的呢? - GSerg
4
猜测是:在GAC中有相同的依赖程序集的不同版本。我在使用TFS程序集时遇到了这个问题,花费了整整几天才找出问题所在。 - Dario Solera
1
例如,如果您引用了驱动程序(如数据库驱动程序),并且某个用户仅安装了32位版本,则它将强制您的应用程序以32位运行。 - slugster
1
我刚遇到了类似的问题。在我的情况下,修复很容易 - 在项目属性的“生成”选项卡上,将“首选 32 位”(就在称为“任何 CPU”的平台目标下方)打开即可。 - Viliam
不错,@Viliam。这就是我的问题解决方案。 - ossentoo
那太烦人了。我选择了Active(Debug)配置,并且未选中Prefer 32位。我将配置更改为Debug,现在它被选中了?当返回Active(Debug)时,它仍然保持选中状态。看起来这个复选框有时会出现显示未选中的错误。 - Kevin Doyon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接