2012-07-04 168 views
0

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

回答

1

由于VS2008是32位,我希望它也可以启动一个32位的过程。另一个原因可能是你引用了32位的DLLs?

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

+0

是的,所有的DLL也是32位。我也在访问IBM Data Server客户端v9.5.3,但是我收到“无法找到或加载注册的.Net Framework数据提供程序”。我试图解决这个问题,我认为这是由于32位64位冲突。关于这个 – nishantv

+0

你有什么想法吗?如果你引用的是32位的DLL(不是AnyCPU或X64),那么应用程序将以32位模式运行,因为你不能在64位中使用32位DLL位应用程序,反之亦然。 –

0
  1. 去盖=>配置管理器
  2. 单击活动解决方案平台下拉列表中选择。
  3. 在输入或选择新平台下拉列表中,选择'x64'。
  4. 点击确定。
+0

任何CPU都一样好 - 它应该在64位系统上以64位模式运行应用程序,在32位系统上以32位模式运行应用程序。除非你引用强制应用程序进入32位模式的东西。只有64位才能防止它在32位系统上运行。 –

+0

@Mayur我做了你说的,但选择了x86。我的应用程序现在可以在使用vs2008访问32位dsn的64位机器上成功运行。我的问题是,我必须手动为所有应用程序执行此操作才能工作?什么是通用解决方案? – nishantv

+0

专门为X86编译的应用程序无法以64位模式运行 - 这里一定有些混淆...... –

2

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

这是.EXE项目的平台目标,它决定了应用程序的“比特位”。如果任何引用的.DLL项目具有与正在运行的应用程序的“位”不兼容的“位”,您将收到运行时错误。例如。如果AnyCPU .EXE项目引用x86 .DLL项目,它将成功地在32位Windows上运行,但在64位Windows上失败并显示运行时错误。


的问题是有关Visual Studio 2008,但是的Visual Studio 2012和.NET 4.5引入了anycpu32bitpreferred setting

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

上(在Visual Studio中默认值)车削该设置意味着AnyCPU应用程序将执行32位甚至在64位操作系统。

+0

所有项目都设置为AnyCPU以及.EXE项目的平台目标。但是我的应用程序在32位模式下运行,如任务管理器中所示。另外,如上所述,它的失败是因为它无法在运行时访问IBM DB2 Server Client的32位DSN。 – nishantv

+0

@nishantv:文档位于:http://msdn.microsoft.com/en-us/library/zekwfyz4.aspx。看起来,无论是文档都是错误的,我们有一些事情是你忽视的。 –

相关问题