2009-01-24 90 views
2

當您在.NET中編譯Windows應用程序時,您可以將「Platform Target」設置爲x86或x64。這會優化您的代碼到處理器的特定架構,並允許逃離IL。 有誰知道是否有什麼可以實現Windows Mobile應用程序的相同結果?我只關心在ARM架構上運行我的應用程序。以.NET編譯器爲目標的ARM體系結構

回答

1

使用MonoAhead-of-Time(AOT)彙編。這就是他們如何將UNITY腳本編寫到作爲ARM平臺的iPhone上。它可能需要一些勞動才能在Windows Mobile上啓動並運行,因爲afaik,沒有人做過特定的平臺端口,但編譯器等應該已經在那裏了。

您可以在MS PDC here上看到Miguel de Icaza的介紹。

4

我不相信指定平臺目標確實優化給定體系結構生成的IL。相反,它說,「我只在指定的架構上運行,因爲我包含特定於該架構的P/Invoke調用。」至少,這是我對它的理解。這意味着,在x64機器上運行時,可執行文件可以在32位版本的CLR下運行,以實現兼容性。

這是如何適應緊湊框架​​(我認爲是你的實際平臺?)我不確定。 (AOT)彙編。

+0

我不認爲這是真的。我已經將Windows/Web應用程序編譯爲x64應用程序,即使您有符號可用,並且附加調試程序很多次,您也會收到調試程序無法獲取變量值的消息,因爲代碼是優化。 – 2009-01-24 21:52:00

2

x86或x64不優化IL - 這是在部署的計算機上運行的JITter的工作。 x86或x64只是marks a bitness flag

當然,在桌面框架中,您可以將您的MSIL NGEN指定給特定的CPU - 但是IIRC,缺少本機映像將會恢復爲JIT編譯。除此之外,儘管如此,我不認爲NGEN可以用於.NET CF。

我不知道爲什麼你需要限制ARM處理器,但P/Invoke來GetSystemInfo將返回一個SYSTEM_INFO結構與它的處理器類型。這可能會阻止你的應用程序繼續運行!ARM,但不能真正運行。

編輯:重新閱讀這個問題,我注意到除了C#和.NET標記外,沒有任何跡象表明您只需要一個託管解決方案。如果你願意非託管,你顯然可以編譯到ARM。

2

如果您想在基於Windows Mobile的設備上創建基於ARM的應用程序,請安裝.NET Compact Framework。你將在VS中有一個新的「智能設備」項目類型。

我不知道是否有任何其他ARM平臺WM的JIT,也有.NET Micro Framework,但我不能告訴你任何關於此的信息,也許這會解決你的問題嗎?