我想分發我的.NET程序沒有.NET框架。是否有可能將.NET程序編譯爲機器碼?是否有可能將.NET IL代碼編譯爲機器代碼?
回答
是的,你可以使用Ngen.exe進行預編譯,但是這並不能消除CLR依賴。
您還必須運送IL程序集,Ngen的唯一好處是您的應用程序可以在不調用JIT的情況下啓動,因此您可以獲得真正快速的啓動時間。
根據CLR通過C#:
此外,組件採用 NGEN預編譯通常比JIT'ed慢 組件因爲JIT編譯器 可以優化到目標機器 (32位64?位?特殊寄存器? 等),而NGEN只會產生 基準編譯。
編輯:
有從CLR通過C#以上信息的一些爭論,如某些人所說,你需要在目標機器上只安裝過程的一部分運行NGEN。
我不認爲這是可能的。你可以做一個prejitted程序集,但你仍然需要這個框架。
Remotesoft有一個: Salamander .NET Linker
我沒有任何與它的經驗,雖然。
這個問題已經被問過,並再次,這是唯一正確的答案。這是可能的,但有代價。 – chrissie1 2008-09-26 17:25:44
我認爲你不應該:這是JIT編譯器的任務。
但是,您可以使用ClickOnce或Windows Installer進行部署,以便丟失的框架不是一個很大的問題:您可以告訴安裝程序下載框架並安裝它。
有一些第三方工具可以做到這一點,例如
另一個(昂貴的和專有的,牌照爲$ 1599年開始)的產品,可以做到這一點Xenocode Postbuild。雖然我自己並沒有使用它,但它花費的是非洲小國的國民生產總值和所有...
我一直認爲將c#直接編譯爲機器代碼而不需要CLR依賴雖然...
如果你只關心部署框架的大小,你可能會閱讀this。
是否有可能將.NET IL代碼 編譯爲機器碼?
是的,但.NET Framework在運行時(默認)或安裝時(ngen)爲您執行。除此之外,這個IL - >機器代碼是在每檯安裝機器上單獨完成的,所以它可以針對特定機器進行優化。
我想分發我的.NET 沒有.NET框架的程序。 是否有可能將.NET 程序編譯爲機器碼?
不,對於所有意圖和目的,您不能這樣做。第三方解決方案可能在某些情況下工作,但到那時我不會再真正將其視爲「託管代碼」或「.NET」。
編譯部分有IL2CPU。
看看MONO項目:帶有--aot選項的mono命令。 http://www.mono-project.com/AOT
是的,你現在可以!最近微軟公佈了.NET Native,這是一種利用.NET Native運行時(他們稱之爲MRT)將應用程序編譯成一個二進制文件(實際上是一個可執行文件和一個動態庫)的技術。
見鏈接: http://blogs.msdn.com/b/dotnet/archive/2014/04/02/announcing-net-native-preview.aspx http://blogs.msdn.com/b/dotnet/archive/2014/04/24/dotnetnative-performance.aspx
- 1. 是否有可能將C代碼編譯爲Javascript代碼?
- 2. 是否有可能將.NET字節碼編譯爲機器語言?
- 3. 如何將IL代碼翻譯爲AST
- 4. 是否有可能使用pypy將Java字節碼編譯爲本地代碼?
- 5. 是否有可能爲iPad編譯Fortran代碼?
- 6. 是否有編譯爲機器代碼的C C++ C#編譯器
- 7. 是否有JavaScript的本地機器代碼編譯器?
- 8. IL編譯器爲.NET?
- 9. 我如何編譯C#代碼的IL代碼指令
- 10. 將OpenMP代碼編譯爲C代碼
- 11. gcc是否可以不編譯代碼?
- 12. 是否將C#代碼編譯爲本機二進制文件?
- 13. Ionic將代碼編譯爲本機?
- 14. 編譯器是否只編譯可以執行的代碼?
- 15. Fortran 95編譯器是否可以編譯Fortran 77代碼?
- 16. 是否有可能使用python編譯c代碼?
- 17. 是否有可能使用Tuples進行WP7 Beta編譯代碼?
- 18. AngularJS - 是否有可能從代碼編譯和鏈接模板?
- 19. IL級代碼調試器
- 20. 是否有可能在.NET中運行時編譯和執行新代碼?
- 21. 是否有程序將x86代碼更改爲彙編代碼?
- 22. 是否可以將一串Clojure代碼編譯爲java的類?
- 23. 將Python編譯爲機器碼是否可行?
- 24. 是否有可能編寫被GWT編譯器忽略的代碼?
- 25. 編譯發佈和調試將生成不同的IL代碼+不同的機器代碼?
- 26. 是否有可能在scala中有編譯器特定的代碼段
- 27. 非託管C#代碼是否編譯爲IL並在CLR上運行?
- 28. 將C和彙編編譯爲純機器代碼?
- 29. 如何將VM特定的代碼編譯爲x86機器代碼?
- 30. 是否可以在iOS上編譯爲Arduino編寫的代碼?
ngen程序集爲什麼會變慢? ngen在目標機器上被調用,所以實際上不應該有所作爲。 哦,而ngen不是問題的實際答案。 – OregonGhost 2008-09-26 17:41:40
Ngen由開發人員調用,用於預編譯應用程序,而不是在目標機器上。請閱讀C#中關於Ngen的部分。 – FlySwat 2008-09-26 17:49:26
喬恩,這取決於。 `ngen`可以被目標機器上的安裝過程調用,並且據我所知這實際上是針對在.NET中實現的各種Microsoft產品完成的。 – 2008-09-26 17:50:54