日本国产亚洲-日本国产一区-日本国产一区二区三区-日本韩国欧美一区-日本韩国欧美在线-日本韩国欧美在线观看

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

.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俄罗斯免 | 国产精品女人在线观看 | 99久久久久久久 | 久久久久久夜精品精品免费 | 国产| 国产亚洲欧美成人久久片 | 青青青爽国产在线视频 | 日本 黄 a| 1024.1024亚洲 国产 图片 110139日韩欧美 | 欧美一级高清免费a | 九九热这里只有 | 国产精品久久久久久久9999 | 在线视频一区二区三区三区不卡 | 午夜精品久久久久久久 | 伊人毛片| 国产aa| 亚洲综合亚洲综合网成人 | 国产亚洲欧美日韩综合另类 | 日本黄色大片在线观看 | 欧美日韩在线视频不卡一区二区三区 | 久久久精品2019中文字幕2020 | 国产黄的网站免费 | 国产精品你懂的 | 97免费观看视频 | 国产午夜毛片 | 77777亚洲午夜久久多喷 | 天天上天天干 | 国产欧美日韩综合在线一 | 久久成人免费观看草草影院 | 中文字幕狠狠干 | 亚洲区精品久久一区二区三区 | 杨幂国产精品福利在线观看 | 欧美日韩一区二区不卡 | 日韩成人在线观看 | 四虎永久地址入口 | 日韩在线一区二区三区免费视频 | 青青草手机在线 | 国产亚洲精品美女一区二区 |