• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

        .net框架程序設計讀書筆記二(Microsoft .net 框架開發平臺體系架構)

        .net框架程序設計讀書筆記二(Microsoft .net 框架開發平臺體系架構)

        更新時間:2022-05-03 文章作者:未知 信息來源:網絡 閱讀次數:

        第一章:Microsoft .net 框架開發平臺體系架構



        本章的目標:對.net框架體系架構有一個總體的認識,并對.net框架中出現的一些新的技術和術語有一個基本的了解。



        1.1 將源代碼編譯為托管模塊

        關于編程語言的選擇

        .net框架的核心是通用語言運行時,顧名思義它是一個可被各種不同的編程語言所使用的運行時。CLR的很多特性可用于所有面向它的編程語言,如果CLR用異常來報告錯誤,那么所有面向它的語言都將通過異常來得到錯誤報告。如果CLR允許我們創建線程,那么所有面向它的語言也都可以創建線程。

        實際上CLR在運行時對開發人員用何種編程語言來完成源代碼一無所知。這意味著我們應該選擇那些能夠最容易表達我們意圖的編程語言。我們可以用任何自己喜歡的語言(面向CLR的)來編寫代碼。

        不同的編程語言允許我們使用不同的語法進行開發,不同的語法對于我們解決各種問題的難易程度是有影響的,例如:對于數學或者金融應用,彩用APL語法更快。



        微軟已經創建了以下幾種面向CLR的編譯器 :

        托管擴展C++

        C#

        Visual Basic

        Jscript

        J#

        IL匯編器



        我們可以用任何支持CLR的編程語言來創建源代碼文件。然后用相應的編譯器來做語法檢查和源代碼分析。最后生成托管橡塊。



        托管模塊



        托管模塊是一個需要CLR才能執行的標準Windows可移植可執行(Portable executable,簡稱PE)文件。



        托管模塊的組成部分:

        l PE表頭

        標準Windows PE文件表頭,類似于通用對像文件格式表頭。該表頭指出了文件的類型:GUI(圖形用戶界面),CUI(控制臺用戶界面),或者DLL. 此處的DLl并非我們理解的傳統的windows 動態鏈接庫文件,雖然都叫DLL,但,net平臺中的DLL指程序集文件的一種形式),該表頭還包含文件創建時間。對于包含CPU代碼的模塊,該表頭還會包含有關本地CPU代碼的一些信息



        l CLR表頭

        包含標識托管模塊的一些信息(可以被CLR或者一些實用工具解析)。

        1、 CLR版本號

        2、 托管模塊入口點方法(Main方法)的元數據標記

        3、 托管模塊的元數據標記

        4、 資源

        5、 強命名

        6、 其他一些意義不是太大的信息的位置和尺寸



        l 元數據

        每個托管模塊都包含有一些元數據表。元數據表主要分兩種,一種用于描述源代碼中定義的類型和成員,一種用于描述源代碼中的引用類型和成員。



        l 中間語言(IL)和代碼

        編譯器在編譯源代碼是產生的指令。CLR在運行時會將IL代碼編譯成本地CPU指令



        元數據(metadata)就是一個數據表的集合,在這些表中,其中一些用于描述托管模塊中所定義的內容(比如所定義的類型和它們的成員,另外一些用于描述托管模塊中引用的內容(比如被引用的類型和它們的成員)。元數據總是和包含IL代碼的的文件相關聯。



        元數據的用處:

        1、 省去了源代碼編譯時對頭文件和庫文件的需求,

        2、 Visual Studio .Net可以利用元數據來輔助我們編寫代碼。智能感知就是這樣做的。

        3、 可以序列化和反序列化

        4、 垃圾收集器可以追蹤對像的生存期。





        1.2 將托管模塊組合為程序集

        CLR實際上并不和托管模塊打交道,它直接打交道的對象是程序集(assembly).程序集是一個抽象的概念,剛開始往往很難理解。首先,程序集是一個或多個托管模塊,以及一些資源文件的邏輯組合。其次,程序集是組件復用,以及實施安全策略和版本的最小單位。根據我們對編譯器和相關工具所做的選擇,程序集可以是一個文件或者多個文件。

        默認情況下,編譯器會將產生的托管模塊轉換為一個程序集。也就是說,c#編譯器產生的是一個我包含了清單的托管模。其中的清單表明程序集中僅包含一個文件。對于僅包含一個托管模塊,并且沒有資源(或者數據)文件的項目來說,程序集就是托管模塊,而且在創建過程中,不需要執行任何其他的步驟。

        程序集中的模塊還包含它所引用的程序集的一些信息(如版本號信息)。這些信息使得一個程序集得以實現自描述(self-describing)。換句話說,CLR知道執行一個程序集所需要的所有內容,它不需要再在注冊表或者活動目錄中獲取額外的信息。因此,程序集的部署要比非托管組件的部署容易得多。

        1.3加載通用語言運行時

        一個程序集或者是一個可執行應用程序,或者是一個包含供可執行應用程序使用的一組類型(組件)的DLL。CLR負責管理包含在程序集中的代碼的執行。這意味著宿主機器必須安裝.net框架。微軟已經創建了一個可以將.net框架免費安裝到客戶機上的分發包。.net框架最終會和將來的Windows打包在一起,這樣我們就不需要將它和我們的程序集放在一起來發布了。

        我們可以通過在%windir%\system32目錄下查找MSCorEE.dll文件來判斷一個機器中是否安裝了.NET框架。如果想確定一個機器中安裝了哪些版本的.NET框架,可以查看下面的注冊表鍵的子鍵:

        HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ .NETFramework \ policy



        當生成一個EXE程序集時,編譯器/鏈接器會產生一些特殊的信息,并將它們嵌入到結果程序集的PE文件表頭及其各個組成文件的.text部分。當EXE文件被調用時,這些特殊的信息將導致CLR被加載并初始化。CLR隨后會定位至應勝程序的入口點方法,從面以此來啟動應用程序。



        類似地,如果是一個非托管應用程序通過調用LoadLibrary來加載一個托管程序集,那么該托管程序集DLL的入口點函數也會知道去加載CLR來處理包含在其中的代碼。



        托管EXE加載并初始化CLR的過程

        1. MSCorEE檢查CLR表頭以獲得Main方法的元數據標記。

        2. MSCorEE 檢查Main方法的元數據以獲得其IL在托管EXE中的位置。

        3. MSCorEE 將Main方法的IL編譯成本地CPU指令。

        4. MSCorEE跳轉到Main方法編譯后的本地CPU指令上(使用主線程)

        5. 應用程序開始運行。



        托管DLL的情形

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 巨胸喷奶水视频www免费视频| 国产午夜亚洲精品不卡免下载| 亚洲黄色在线观看网站| 久久久久se色偷偷亚洲精品av| 亚洲成a人片在线不卡一二三区| 一级全免费视频播放| 色影音免费色资源| 国产av无码专区亚洲国产精品| 亚洲国产精品xo在线观看| 一级片在线免费看| 亚洲女久久久噜噜噜熟女| 亚洲av无码日韩av无码网站冲| 91精品国产免费久久国语蜜臀| 久久亚洲av无码精品浪潮| 亚洲精品456人成在线| 成人精品一区二区三区不卡免费看| 亚洲色偷偷色噜噜狠狠99网| 在线永久免费的视频草莓| 亚洲一本综合久久| 7723日本高清完整版免费| 国产亚洲精品资源在线26u| 国产成人免费午夜在线观看| 114一级毛片免费| 国产免费丝袜调教视频| 久久被窝电影亚洲爽爽爽| 亚洲高清视频在线| 99视频在线观看免费| 午夜亚洲AV日韩AV无码大全| 2022年亚洲午夜一区二区福利| 91视频精品全国免费观看| 免费国产高清视频| 亚洲丁香色婷婷综合欲色啪| 亚洲五月丁香综合视频| 亚洲福利在线观看| 中文字幕永久免费| 亚洲国产精品自在拍在线播放| 免费a级毛片无码a∨蜜芽试看| 成年男女免费视频网站| 国拍在线精品视频免费观看| 亚洲免费观看在线视频| 免费大黄网站在线观看|