2008-09-26 84 views

回答

19

是的,你可以使用Ngen.exe進行預編譯,但是這並不能消除CLR依賴。

您還必須運送IL程序集,Ngen的唯一好處是您的應用程序可以在不調用JIT的情況下啓動,因此您可以獲得真正快速的啓動時間。

根據CLR通過C#:

此外,組件採用 NGEN預編譯通常比JIT'ed慢 組件因爲JIT編譯器 可以優化到目標機器 (32位64?位?特殊寄存器? 等),而NGEN只會產生 基準編譯。

編輯:

有從CLR通過C#以上信息的一些爭論,如某些人所說,你需要在目標機器上只安裝過程的一部分運行NGEN。

+0

ngen程序集爲什麼會變慢? ngen在目標機器上被調用,所以實際上不應該有所作爲。 哦,而ngen不是問題的實際答案。 – OregonGhost 2008-09-26 17:41:40

+0

Ngen由開發人員調用,用於預編譯應用程序,而不是在目標機器上。請閱讀C#中關於Ngen的部分。 – FlySwat 2008-09-26 17:49:26

+3

喬恩,這取決於。 `ngen`可以被目標機器上的安裝過程調用,並且據我所知這實際上是針對在.NET中實現的各種Microsoft產品完成的。 – 2008-09-26 17:50:54

1

我不認爲這是可能的。你可以做一個prejitted程序集,但你仍然需要這個框架。

19

Remotesoft有一個: Salamander .NET Linker

我沒有任何與它的經驗,雖然。

+1

這個問題已經被問過,並再次,這是唯一正確的答案。這是可能的,但有代價。 – chrissie1 2008-09-26 17:25:44

1

我認爲你不應該:這是JIT編譯器的任務。

但是,您可以使用ClickOnce或Windows Installer進行部署,以便丟失的框架不是一個很大的問題:您可以告訴安裝程序下載框架並安裝它。

5

另一個(昂貴的和專有的,牌照爲$ 1599年開始)的產品,可以做到這一點Xenocode Postbuild。雖然我自己並沒有使用它,但它花費的是非洲小國的國民生產總值和所有...

0

我一直認爲將c#直接編譯爲機器代碼而不需要CLR依賴雖然...

1

如果你只關心部署框架的大小,你可能會閱讀this

3

是否有可能將.NET IL代碼 編譯爲機器碼?

是的,但.NET Framework在運行時(默認)或安裝時(ngen)爲您執行。除此之外,這個IL - >機器代碼是在每檯安裝機器上單獨完成的,所以它可以針對特定機器進行優化。

我想分發我的.NET 沒有.NET框架的程序。 是否有可能將.NET 程序編譯爲機器碼?

不,對於所有意圖和目的,您不能這樣做。第三方解決方案可能在某些情況下工作,但到那時我不會再真正將其視爲「託管代碼」或「.NET」。