2010-08-18 40 views
2

我有一個WinForm應用程序。我編譯它,雙擊它。可以預料的是,csc.exe會啓動,然後消失,應用程序出現。爲什麼C#編譯器第二次啓動?

我假設在這一點上的應用程序已實時編譯,所以沒有理由CSC.EXE在以後再踹。

然後我退出應用程序並重新啓動它。我看到csc.exe再次啓動。

發生了什麼事?

+0

@Timwi。通過雙擊,我的意思是我啓動我的app.exe。它不在IDE內部。 – AngryHacker 2010-08-18 21:03:57

回答

4

你是否在使用序列化?我相信在某些情況下會建立一個臨時議會。你的應用中有類似的東西嗎?

注意,JIT編譯器是無關的CSC,所以這不應該是什麼關係呢。

+0

@Downvoter:謹慎評論?爲什麼這是一個這麼愚蠢的想法? – 2010-08-18 21:02:04

+0

我的錯誤!意外點擊!已經撤消!抱歉! – Timwi 2010-08-18 21:03:58

+0

@Timwi:Goodo :) – 2010-08-18 21:04:15

2

如果您使用序列化需要,以創建所需的類編譯動態組裝。

這意味着大多數webservice調用都會導致第一次調用csc.exe。之後,動態DLL應該是緩存。

+0

有對Web服務的調用。但是,每次調用都是一樣的,所以我假定序列化程序集只需要創建一次。爲什麼它第二次創建它(我假設這就是爲什麼csc.exe被調用)。 – AngryHacker 2010-08-18 21:19:49

+0

@AngryHacker你是否手動創建序列化程序集?如果您不是(只是正常構建項目),則序列化程序集始終在運行時創建。你是使用XmlSerializer與XmlTypeMapping還是使用XmlType? (創建序列化) – DevinB 2010-08-20 11:54:58

1

如果使用的XmlSerializer(直接或間接的,即在調用網絡服務時),然後在其內部產生的臨時裝配用串行執行:創建基於反射信息源文件,並用CSC.EXE編譯它。您可以在開發時通過SGen預生成序列化程序。