爲了迎合.NET,添加其他類型的擴展是沒有任何意義的。
.NET可執行文件是PE文件,它們提供最少量的本機代碼來引導正確版本的CLR並將IL拉入內存並交給CLR。
Windows本身就知道如何處理PE文件以及內置在EXE中的間接機制Windows也不需要了解.NET。
使用.il
文件,您需要在Windows中註冊擴展名,然後確保加載了正確版本的CLR - 據我所知,您只能將擴展名與一個可執行文件相關聯。
要支持CLR的多個版本,您需要某種中介,然後檢查您的.il
文件以確定要加載哪個CLR ....並且事情在此之後變得複雜而脆弱。
在PE中打包所有這些問題整潔而優雅地解決了這些問題。
雖然這是一篇較舊的文章,但其原理在當前保持不變。NET框架:
An In-Depth Look into the Win32 Portable Executable File Format, Part 2
的關鍵部分 「的.NET頭」 解釋了這是如何工作:針對Microsoft .NET 環境下生產
可執行文件是第一和最重要的 PE文件。但是,在大多數情況下,在.NET 文件中的正常代碼和數據是最小的。 .NET可執行的主要目的是 得到.NET特定 信息,例如元數據 和中間語言 (IL)到存儲器中。另外,一個針對MSCOREE.DLL的.NET 可執行鏈接。 這個DLL是一個 .NET進程的起點。當加載一個.NET可執行文件 時,其入口點通常是一個 微小的代碼段。這存根只是 跳轉到 MSCOREE.DLL(_CorExeMain或 _CorDllMain)導出函數。從那裏,MSCOREE負責並開始使用 元數據和來自可執行文件 的IL。此設置與使用MSVBVM60.DLL的Visual Basic(.NET之前) 中的應用程序的 類似。 .NET信息的起始點 是 IMAGE_COR20_HEADER結構, 當前在CorHDR.H中從 .NET Framework SDK和更新的 版本的WINNT.H中定義。在DataDirectory中, IMAGE_COR20_HEADER被 IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 條目指向。圖10 顯示了一個 IMAGE_COR20_HEADER的字段。所述 元數據的格式,方法IL,和其他東西 通過 將在隨後的 文章描述IMAGE_COR20_HEADER指向。窗戶
來源
2011-03-30 17:32:37
Kev
+1好問題。爲了比較,這將更接近於Java部署的工作原理 - 對嗎? '.jar'文件在運行之前必須轉換爲字節碼(據我瞭解),這會影響其啓動時間。我是Java新手,所以Java大師,請糾正任何錯誤陳述。 – harpo 2011-03-30 17:29:40
你在問關於文件內容還是擴展名? – SLaks 2011-03-30 17:35:37
Slaks - 我想知道兩者。更多的信息更好.. – paseena 2011-03-30 17:38:11