.NET程序集導入過程

    .NET程序集導入過程分爲兩個部分,一個是通過Assembly Resolver找到程序集,隨後通過Assembly Loader將其導入。

Assembly Resolver 首先運用Version Policies來確定最終的程序集版本。Version Policy可以在三個級別指定,分別是應用程序級別,組件級別和machine級別。每一級都可以通過bindingRedirect將版本重定向,且低級的輸出是高級的輸入。當Assembly Resolver決定哪一個版本將會被導入後,將定位到確切的程序集文件。首先在Global assembly cache裏查找(assemly name必須含有public key),若找不到,則使用CODEBASE hint來定位。若CODEBASE hint沒有被提供,Assembly Resolver就開始搜索一系列目錄,首先是搜索APPBASE目錄和其下的子目錄,當然,這些子目錄必須要在應用程序的config文件裏顯示地指定。

       Assembly Loader使用CLR Loader將一個指定的程序集文件導入。CLR Loader負責導入和初始化程序集,模塊,資源和類型。CLR Loader採用delay-load的方式,在CLR中,導入主要是由JIT編譯器觸發的。當JIT編譯器試圖將一個方法體由CIL轉換成機器碼時,需要訪問類型的類型定義,以及方法中的變量或參數類型。導入一個類型隱含着導入程序集和包含類型定義的模塊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章