2012-07-04 225 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。看起來,無論是文檔都是錯誤的,我們有一些事情是你忽視的。 –

相關問題