2013-12-08 127 views
4

當e。 G。創建Windows Phone應用程序,我必須在模擬器和ARM中選擇x86進行調試,以便在手機上進行調試。那當然是因爲我的電腦運行的是x86(x64,具體而言,但x64處理器只有不同的寄存器長度(請糾正我,如果我錯了)),我的手機有ARM處理器。但不像C++ C#不是直接編譯成彙編器,而是編譯成某種中間語言。所以我的問題是:爲什麼這個中間語言在不同的平臺上有所不同。重寫解釋中間語言的虛擬機是不夠的?例如, Java可以在Mac,PC等上運行,無需爲每個平臺編譯。爲什麼需要爲多個平臺編譯.NET代碼

回答

4

你剛剛做錯了。無論平臺選擇如何,IL都完全一樣。

當您在Visual Studio 2013中創建新的Phone項目時,您將得到一個解決方案三個平臺選擇:AnyCPU,x86和ARM。後兩者在純.NET項目中是多餘的。它們出現的唯一原因是因爲Phone還支持本地C++項目。由於C++直接編譯爲機器碼,所以目標體系結構確實是

在純.NET項目中,您只需要AnyCPU。當然命名相當;)

1

中間語言(CIL;通用中間語言)不是跨目標平臺不同。然而,其已經將準時編譯(或預編譯)爲目標CPU的機器語言。否則它不會運行(注意:它可以被解釋,但這不太可能)。 Java完全一樣。

關於Visual Studio中的目標CPU設置,您始終可以使用AnyCPU並且問題消失。

+0

坦克爲您的答案。而且要清楚:我沒有問題,這更像是一個純粹的興趣問題。但無論如何:謝謝。 – jalgames