考慮我們有.NET Winforms應用程序或控制檯應用程序。 任何人都可以告訴我什麼將一步一步發生,直到WinForm或控制檯應用程序啓動。我想知道內部結構 - 比如EXE如何與Framework進行通信,CLR的作用是什麼,在啓動應用程序本身時會發生什麼情況。例如:用戶單擊.NET程序集(EXE)時會發生什麼?
回答
當您雙擊點擊一個.NET的.exe程序集:
- Windows的PE加載器踢
- 如果你是一個Windows> = Windows XP中,將檢測到可執行文件是可執行的託管,將其轉發給.net通過調用mscoree.dll中的_CoreExeMain(_CoreDllMain,如果你雙擊託管的.dll)。它可以使用程序集配置文件來知道使用哪個運行時。
- 如果您使用的是Windows XP操作系統,請在Windows XP中,該.exe文件包含一小段原生代碼,該代碼將跳轉到mscoree.dll的_CoreExeMain或_CoreDllMain。
- 然後,mscoree.dll會初始化.net運行時,具體取決於全局配置,程序集配置文件以及哪些不。
- 然後,如果它是一個.exe,它將JIT編譯它的入口點方法,並開始執行它。
這太棒了。感謝您的回答Jb Evain! – Sathish 2010-05-07 12:11:13
您可能想要類似於:Microsoft .NET內部
還是因爲這是尚未公佈:基本.NET,第一卷:公共語言運行庫
http://www.amazon.co.uk/Essential-NET-Microsoft-Development-Paperback/dp/0201734117
謝謝你。我將通過書籍檢查 – Sathish 2010-05-07 12:11:40
的MSCoreEE.dll(MSCore執行Engine.Dll實例只爲一個一體機) 說,例如,當一個.net組件/ .EXE被雙擊或啓動時,OS將加載窗器會inturn加載PE頭文件(可移植可執行文件)[在win32可執行文件的情況下,PE頭文件將包含引導程序(靜態Main())的地址,它將載入並執行main方法,在.Net中,引導程序將包含將存在於C:\ Windows \ System32 \ mscoree.dll中的MSCoreEE.Dll地址,該地址將被執行並加載.net程序集針對的.Net運行時。機器上可以安裝多個版本的.Net運行時,但是,只有一個mscoreee.dll實例可以加載特定的運行時。
CLR將創建第一APP域本身和加載組件(如果組件沒有在代碼中創建附加的應用程序域)
CLR創建3個應用程序域內部 1.系統的應用程序域 一個。 負責加載共享和默認應用程序域,還將mscorelib.dll加載到共享應用程序域 b。 創建3個異常例子 i。致命的發動機異常 ii。堆棧溢出異常 iii。內存不足異常(非常重要的一點是,當開發人員認爲應用程序可能內存不足並想將異常寫入日誌文件時,CLR會預先創建「內存不足」異常,因此會發生內存不足異常沒有剩餘內存來創建此異常的新實例,因此,CLR預先創建此例外以備將來在應用程序中使用 2.共享應用程序域 a。包含mscorlib.dll b。其他應用程序域使用的其他常用庫 c。但是,開發人員無法將自定義Dll推入共享應用程序域,因爲它不能從CLR外部控制它,CLR託管這些dll並且CLR本身無法控制其由開發人員託管的方式,但可以使用某些COM接口開發人員可以託管CLR慣例 3.默認應用程序域 a。所有用戶的二進制文件的.exe的,Dll在這裏加載
- 1. .NET 4.0引用.NET 2.0程序集時會發生什麼?
- 2. 引用.net 2程序集時.Net 4應用程序中會發生什麼?
- 3. .net應用程序啓動時會發生什麼情況?
- 4. 用戶更新應用程序時,PendingIntents會發生什麼?
- 5. 從.NET 4.0網站調用.NET 2.0程序集時,發生了什麼?
- 6. 單擊應用程序的啓動圖標時會發生什麼?
- 7. 當我加載程序集時會發生什麼?
- 8. 當程序運行時發生事件時會發生什麼
- 9. 關閉.NET控制檯應用程序時會發生什麼情況?
- 10. 啓動.NET控制檯應用程序時會發生什麼情況?
- 11. iphone - 升級應用程序...客戶會發生什麼情況?
- 12. .NET線程拋出異常時會發生什麼?
- 13. 單擊提交按鈕時會發生什麼
- 14. 在Excel中雙擊單元格時會發生什麼情況?
- 15. 什麼時候.NET會檢查程序集依賴關係?
- 16. 當您爲同一個程序集多次調用Assembly.CreateInstance時會發生什麼?
- 17. 當用戶從AppleStore更新應用程序時發生什麼
- 18. 當你在進程中點擊ctrl + z時會發生什麼?
- 19. 發生故障時會發生什麼?
- 20. 當應用程序崩潰時會發生什麼?
- 21. 當Android應用程序「被殺」時會發生什麼
- 22. 應用程序沒有指定主題時會發生什麼
- 23. 當應用程序被刪除時PendingIntents會發生什麼?
- 24. 應用程序崩潰時承諾會發生什麼?
- 25. 更新Android應用程序時SharedPreferences會發生什麼?
- 26. 當應用程序從後臺打開時會發生什麼?
- 27. 更新Android應用程序時會發生什麼?
- 28. 應用程序池回收時緩存會發生什麼?
- 29. 應用程序更新時運行警報會發生什麼?
- 30. 當Android應用程序強行關閉時會發生什麼
作爲stakoverflow的答案?有幾本書的書是關於這些的,長達數百頁;) – TomTom 2010-05-07 11:51:36
@TomTom - 這不太公平!......這些是刪節版本。 – 2010-05-07 11:56:35
1.下載單聲道。 2.編譯它。 3.在調試器下啓動它。 4.單步。 5.重複第4步。 – 2010-05-07 11:58:22