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

原文轉載於:https://blog.csdn.net/g710710/article/details/23161807

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


今天有項目的代碼收到客戶的反饋,要求所有的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

注:以上文章雖好,但是我在做項目的時候,用any CPU編譯的exe,調用64位系統上的dll的時候,總是調不起來,後來用x86編譯的exe就可以調用64位系統上的dll。所以要是在64爲系統上運行,用x86編譯的是幾乎都能運行的。

2.如果是c++程序在64位系統上運行,記得安裝開發工具是要自己勾選上,默認是不安裝的。



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章