關於.NET編譯的目標平台(AnyCPU,x86,x64)

來源:互聯網
上載者:User

標籤:blog   c   tar   http   a   width   

今天有項目的代碼收到客戶的反饋,要求所有的EXE工程的目標平台全部指定成x86,而所有DLL工程的目標平台全部指定成AnyCPU 

 下面我們一起看看這個目標平台有什麼作用,各選項有什麼差別吧。在VisualStudio中,在編譯設定中有如下選項: x86: 將程式集編譯為由相容 x86 的 32 位公用語言運行庫運行。x64: 將程式集編譯為由支援 AMD64 或 EM64T 指令集的電腦上的 64 位元公用語言運行庫運行。anycpu:(預設值)將程式集編譯為在任意平台上運行。Itanium: 將程式集編譯為由採用 Itanium 處理器的電腦上的 64 位元公用語言運行庫運行。 具體行為如下:在 64 位元 Windows 作業系統上:用 x86 編譯的程式集將在 WOW64 下啟動並執行 32 位 CLR 上執行。用 x64 編譯的程式集將在 64 位元 CLR 上執行。用 anycpu 編譯的可執行檔將在 64 位元 CLR 上執行。用 anycpu 編譯的 DLL 將在與載入它的進程相同的 CLR 上執行。 在 32 位 Windows 作業系統上:用 x86或anycpu 編譯的程式集將在 32 位 CLR 上執行。用 x64 編譯的程式集無法運行。 搞清楚這些差異以後,回過頭來看看客戶要求的東西,有沒有道理吧。首先有一點是知道的,客戶希望程式能夠在WINXP以上的各系統中運行(不管是32位還是64位)。因此,不可能選x64,Itanium這種針對特殊處理器的也不會去選。 那都選擇Any CPU這種預設有沒有問題呢?首先看看Any CPU和x86的可執行檔(EXE)在32位和64位下有什麼區別吧,Any CPU在32位下,EXE將以32位執行,而在64位下,EXE將以64位執行。而x86的話,始終以32位執行。客戶希望使用的x86,也就是不希望64位下用64位方式執行EXE程式。我分析的原因是由於系統中可能存在第三方的32位DLL,一旦使用64位執行的EXE,在調用到32位的DLL時,將無法調用。 而DLL,客戶則希望採用Any CPU,我分析的原因是DLL的實際運行方式是受調用它的EXE所影響的,因此設為Any CPU就可以了。而如果設定為x86,雖然看似沒什麼問題,但其無法在64位CLR中運行了,不是太好。 參考資料:http://msdn.microsoft.com/zh-cn/library/zekwfyz4(VS.80).aspx  ------------------------------補充一下,可以使用.NET SDK中提供的CorFlags命令查看程式集的目標平台,也可以修改它,這樣就可以不用重新編譯了。不過,為啥64位下的EXE無法調用32位的DLL呢? 

【引用】http://blog.sina.com.cn/s/blog_7dd67c4b010128ya.html

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.