VS項目調試使用x86,x64,Any CPU平臺的區別

VS項目調試可以選擇x86,x64,Any CPU,它們之間有什麼區?以往我也不怎麼關注,最近在項目iis express裏添加一個虛擬項目時,才意識到這個的影響。從網上找的資料,記錄如下:

一 、x86、x64、Any CPU的區別

  1. 簡單的說,它們之間最直接的區別就是:x86平臺編譯出來的exe(可執行文件)或dll(動態鏈接庫)都是32位的。以此類推,x64對應的則是64位的。而Any CPU則是取決於當前的操作系統,若操作系統是32位的,則編譯出來的程序就是32位的,反之編譯出來的就是64位程序。

  2. 若你的啓動項目,即主程序(編譯出來是exe文件的)是x86平臺下編譯的,而它所依賴的一個項目(或動態鏈接庫)是由x64位平臺編譯出來的,則會提示“未能加載文件或程序集...或它的某一個依賴性。試圖加載格式不正確的程序。”之類的錯誤。這是因爲32位程序不能加載64位的dll,更不能調用其中的類、方法和對象等。反之,若主程序是由x64平臺編譯出來的,而dll是x86的呢?答案。。也是不行的!說到這裏,基本上可以確定一點:dll和主程序的生成平臺只要一致就可以。那麼問題來了!若主程序是Any CPU編譯的,而dll是由x86或者x64平臺編譯的,又或者,主程序是x86或者x64平臺編譯的,而dll是由Any CPU編譯的呢?正確答案就是兩者在“特殊情況”下都是可行的。爲什麼說是“特殊情況”下呢?因爲第一點(紅色字體處)也提到了,Any CPU取決於操作系統,而結合第二點上半部分(紅色字體處)提到的,只要dll和主程序的生成平臺一致,那麼也是可行的。所以,由上可知:若主程序是在Any CPU平臺下編譯的,那麼編譯dll的平臺必須要和編譯主程序的操作系統一致才行。若主程序是在x86或者x64平臺下編譯的,那麼dll就必須要和主程序一致。不過有個特例:若dll由Any CPU編譯的,那麼這個dll就可以被32位和64位的主程序調用。這是爲什麼呢?請看第三點。

  3. 雖說Any CPU編譯出來的程序取決於操作系統,但是由Any CPU編譯出來dll則取決於調用它的主程序,即若主程序是32位的,那麼dll也是32位的,若主程序是64位的,那麼dll就是64位的。所以dll一般採用Any CPU平臺編譯,而主程序一般採用x86平臺編譯。

  4. 使用x86平臺調試的時候,是可以一邊調試一邊修改代碼的,而x64平臺下則不行(啓用了編輯並繼續的)。如下圖:

  5. 1

  6. 調試時修改代碼提示如下:

  7. 3

發佈了85 篇原創文章 · 獲贊 23 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章