0

我有一个应用程序,其项目的平台为任何 CPU。在 VS2008 的 64 位机器(win7)上运行应用程序时,我可以在任务管理器进程中看到 *32,这意味着它以 32 位模式运行。但是我已经阅读了具有 Platform as Any CPU 的应用程序根据机器运行(在我的情况下为 64 位)。我都很困惑。请解释。

4

3 回答 3

2

您确定创建实际可执行文件的项目设置为AnyCPU而不是x86?该项目以及所有引用的项目都应设置为AnyCPU. 如果这样做,该进程将在 64 位 Windows 上作为 64 位进程运行(在 32 位 Windows 上作为 32 位进程运行)。

.EXE 项目的平台目标决定了应用程序的“位数”。如果任何引用的 .DLL 项目的“位”与正在运行的应用程序的“位”不兼容,您将收到运行时错误。例如,如果AnyCPU.EXE 项目引用x86.DLL 项目,它将在 32 位 Windows 上成功运行,但在 64 位 Windows 上会因运行时错误而失败。


问题是关于 Visual Studio 2008 但带有 .NET 4.5 的 Visual Studio 2012 引入了anycpu32bitpreferred 设置

anycpu32bitpreferred编译您的程序集以在任何平台上运行。您的应用程序在支持 64 位和 32 位应用程序的系统上以 32 位模式运行。您只能为面向 .NET Framework 4.5 的项目指定此选项。

启用此设置(Visual Studio 中的默认设置)意味着AnyCPU即使在 64 位操作系统上,应用程序也将以 32 位执行。

于 2012-07-04T11:24:59.903 回答
1

由于 VS2008 是 32 位的,我希望它也能启动 32 位进程。另一个原因可能是您仅引用 32 位 DLL?

您是否尝试过在 VS2008 之外运行该应用程序 - 它是否仍处于 32 位模式?

于 2012-07-04T11:21:16.270 回答
0
  1. 转到构建 => 配置管理器
  2. 单击 Active Solution Platform 下拉列表并选择 。
  3. 在类型或选择新平台下拉列表中,选择“x64”。
  4. 点击确定。
于 2012-07-04T11:24:03.620 回答