2008-08-27 48 views
6

我們正在開發新的開發機器並升級到Vista 64 Ultimate以利用我們的8GB RAM。我們的經理希望我們能夠在32位虛擬機上做所有的開發工作,以確保我們的代碼在生產中不會出現問題。在32位操作系統上是否使用Vista 64編寫代碼?

有沒有什麼辦法可以保證結果程序能在32位操作系統上運行? 我不介意使用虛擬機,但我不喜歡他們如何迫使你回到「單一」監視器類型的視圖。我喜歡將我的VS工具欄移到另一臺顯示器上。

編輯:我們正在使用Visual Studio 2005和2008年,VB.NET和/或C#

編輯:使用Harpreet的answer,這些都是我過去常常把我的Visual Studio IDE的步驟編譯86位/ 32位:

  1. 單擊生成並打開配置管理
  2. 選擇活動解決方案平臺下拉列表
  3. 選擇86,如果它是在列表中,並跳到步驟5,如果不選擇<New...>
  4. 在新解決方案平臺對話框中,選擇86,然後按OK
  5. 驗證所有項目的選擇的平臺是86
  6. 單擊關閉。

享受。

謝謝 基思

+0

btw。爲您的虛擬機使用VMware Workstation會爲您提供多顯示器支持。 – 2009-05-16 09:44:23

回答

9

我在64位機器上開發32位Windows。這不是一個問題。你應該確保你的項目設置爲x86模式編譯才能保守。你會想要通過解決方案中的每個項目並仔細檢查。你也可以使用AnyCPU設置,但這樣做有點冒險,因爲它在你的開發機器上的運行方式與32位機器不同。當然,你想避免64位模式。

我遇到的問題是當應用程序編譯爲64位(顯式64位或AnyCPU編譯並在64位Windows上運行)時不起作用的驅動程序。堅持x86編譯可以完全避免這些問題。這應該會揭示你的開發機器上的所有缺陷。

理想情況下,您可以設置一個可以在32位機器上頻繁執行的構建和測試環境。這應該讓您的管理放心,讓您避免將虛擬機作爲您的桌面。

+0

+1用於在目標平臺中設置構建和測試環境。如果您正在開發針對特定操作系統或操作系統版本的任何軟件,則最好在某處安裝該操作系統的副本,以確保其可行!如果可能的話,最好使用這個盒子作爲持續集成服務器,這樣你的官方版本和官方的單元測試就可以在這個環境下運行。 – 2009-08-16 15:47:45

1

對於64位操作系統編譯在編譯器的選項。你可以絕對編譯成Vista 64位內的32位exe。當你運行應用程序時,你可以在TaskManager中看到在進程旁邊有一個「* 32」,這意味着它是32位;)

我相信你的經理需要更多的教育,真正的意思是:)

4

只要你編譯你的可執行文件爲32位,它們將在32位和64位Windows機器上運行(保證)。使用64位開發機器的優點是,您可以開始使用64位編譯測試代碼(檢查指針是否轉換爲32位整數),這樣可以使未來更容易轉換爲64位(您的公司應該選擇做一個64位版本)。

1

不是你的問題的答案,但可能是你的問題的一個解決方案:VirtualBox(和其他人)支持「無縫集成」模式,它只是給你第二個啓動欄,讓你自由地拖動窗口。

此外,這是你的問題的答案,它取決於你的編譯設置。您可以針對不同的環境進行編譯,並且可以使用Visual Studio在64位系統上完美編譯32位程序。無法告訴你如何,但我相信一些Visual Studio專家可以幫助你。

0

是的,就像亞當說的那樣。有3個選項:MSIL(默認),x64和x86。您可以定位到64位,它將生成專門用於64位系統的dll,或者您可以執行x86,它將在32位和64位上運行,但在64位系統上將具有與32位相同的限制。

MSIL基本上都會讓JITer問題特定於平臺的指令(在一個很小的性能損失相比,本機映像)

編輯:沒有語言,所以我在談論的.NET Framework語言,如VB .net和C#,C++是一個完全不同的動物。

1

我們開發了一個使用VS 2005(2008年即將推出)的32位應用程序,並且剛剛購買了一些XP Pro x64或Vista Business 64位的新機器,以便我們可以充分利用額外的RAM,如果商業上有必要這麼做,可以看一下做64位端口的可能性。除了在我們的開發環境中調整某些腳本之外,我們沒有任何問題。

那些未包含在此升級週期中的開發人員仍然使用32位機器,因此這些應該會在單元測試和應用程序測試套件在辦理登機手續之前當然會運行。

我們還要做的是確保我們有一套「測試版」機器,這些機器由構建和測試集的「典型」配置(XP/Vista,2/4/8內核等)組成的檢查 - 我們有各種不同的穩定性,性能等測試套件 - 在它們被添加到集成區域之前。同樣,這些還沒有遇到任何運行基於64位操作系統的32位應用程序的問題。

無論如何,正如其他人已經說過的,我不會指望它是一個問題,因爲它是編譯器爲目標OS生成適當的代碼,而不管編譯器實際運行的操作系統。

0

發現這個今天:

http://www.brianpeek.com/blog/archive/2007/11/13/x64-development-with-net.aspx

64對.NET

今年早些時候我做了切換到64位操作系統 - Vista旗艦版64位是精確。在大多數情況下,這個過程相對來說是無痛的,但一路上出現了一些小問題(主要是兼容x64的驅動程序,但這不是討論的重點)。

在x64開發的世界裏,我認爲我會在這裏概述一些難題。這個名單可能會增長,所以期待未來的帖子。

在.NET開發的奇妙世界中,應用程序和程序集可以被編譯爲針對各種平臺。默認情況下,應用程序和程序集編譯爲Visual Studio中的任何CPU。在這種情況下,CLR將加載程序集,因爲它正在執行的機器的默認目標是什麼。例如,在x64機器上運行可執行文件時,它將作爲64位進程運行。

Visual Studio還提供了3個特定平臺目標:x86,x64和Itanium(IA-64)。在將可執行文件構建爲特定目標時,它將作爲該類型的進程加載。例如,在x64機器上運行的以x86爲目標的可執行文件將使用32位CLR和WOW64層作爲32位進程運行。當程序集在運行時加載時,如果程序集的目標與主機進程的目標相匹配,則它們只能由進程加載,或者編譯爲任何CPU。例如,如果將x64設置爲程序集的目標,則它只能由x64進程加載。

這已經開始發揮作用,在少數情況下對我來說:

  • XNA - XNA可作爲一組只有32位組件。因此,在引用XNA程序集時,使用它們的可執行文件/程序集必須針對x86平臺。如果它的目標是x64(或任何CPU並在64位機器上運行),則在嘗試加載XNA程序集時將引發錯誤。

  • Microsoft Robotics Studio - XInputGamepadService在內部使用XNA與Xbox 360控制器進行通信。往上看。

  • 託管DirectX - 雖然這已被棄用並被XNA取代,但它仍然有其用途。程序集沒有標記爲特定的目標,但我有內存異常的困難,特別是與Microsoft.DirectX.AudioVideoPlayback程序集。

  • Phidg​​ets - 根據您下載的庫以及何時,它可能會或可能不會被標記爲32位。當前版本(11/8/07)被標記爲這樣,因此需要32位進程來承載它。 確定可執行程序或程序集是否針對特定平臺的最簡單方法是使用corflags應用程序。要使用它,請從「開始」菜單打開一個Visual Studio命令提示符,然後針對要檢查的程序集運行它。

確定可執行程序或程序集是否針對特定平臺的最簡單方法是使用corflags應用程序。要使用它,請從「開始」菜單打開一個Visual Studio命令提示符,然後針對要檢查的程序集運行它。

相關問題