我有一個WinForm應用程序。我編譯它,雙擊它。可以預料的是,csc.exe會啓動,然後消失,應用程序出現。爲什麼C#編譯器第二次啓動?
我假設在這一點上的應用程序已實時編譯,所以沒有理由CSC.EXE在以後再踹。
然後我退出應用程序並重新啓動它。我看到csc.exe再次啓動。
發生了什麼事?
我有一個WinForm應用程序。我編譯它,雙擊它。可以預料的是,csc.exe會啓動,然後消失,應用程序出現。爲什麼C#編譯器第二次啓動?
我假設在這一點上的應用程序已實時編譯,所以沒有理由CSC.EXE在以後再踹。
然後我退出應用程序並重新啓動它。我看到csc.exe再次啓動。
發生了什麼事?
你是否在使用序列化?我相信在某些情況下會建立一個臨時議會。你的應用中有類似的東西嗎?
注意,JIT編譯器是無關的CSC,所以這不應該是什麼關係呢。
@Downvoter:謹慎評論?爲什麼這是一個這麼愚蠢的想法? – 2010-08-18 21:02:04
我的錯誤!意外點擊!已經撤消!抱歉! – Timwi 2010-08-18 21:03:58
@Timwi:Goodo :) – 2010-08-18 21:04:15
如果您使用序列化需要,以創建所需的類編譯動態組裝。
這意味着大多數webservice調用都會導致第一次調用csc.exe。之後,動態DLL應該是緩存。
有對Web服務的調用。但是,每次調用都是一樣的,所以我假定序列化程序集只需要創建一次。爲什麼它第二次創建它(我假設這就是爲什麼csc.exe被調用)。 – AngryHacker 2010-08-18 21:19:49
@AngryHacker你是否手動創建序列化程序集?如果您不是(只是正常構建項目),則序列化程序集始終在運行時創建。你是使用XmlSerializer與XmlTypeMapping還是使用XmlType? (創建序列化) – DevinB 2010-08-20 11:54:58
如果使用的XmlSerializer(直接或間接的,即在調用網絡服務時),然後在其內部產生的臨時裝配用串行執行:創建基於反射信息源文件,並用CSC.EXE編譯它。您可以在開發時通過SGen預生成序列化程序。
@Timwi。通過雙擊,我的意思是我啓動我的app.exe。它不在IDE內部。 – AngryHacker 2010-08-18 21:03:57