六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

.net框架程序設(shè)計讀書筆記二(Microsoft .net 框架開發(fā)平臺體系架構(gòu))

[摘要]第一章:Microsoft .net 框架開發(fā)平臺體系架構(gòu) 本章的目標(biāo):對.net框架體系架構(gòu)有一個總體的認(rèn)識,并對.net框架中出現(xiàn)的一些新的技術(shù)和術(shù)語有一個基本的了解。 1.1 將源代碼編...
第一章:Microsoft .net 框架開發(fā)平臺體系架構(gòu)



本章的目標(biāo):對.net框架體系架構(gòu)有一個總體的認(rèn)識,并對.net框架中出現(xiàn)的一些新的技術(shù)和術(shù)語有一個基本的了解。



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

關(guān)于編程語言的選擇

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

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

不同的編程語言允許我們使用不同的語法進(jìn)行開發(fā),不同的語法對于我們解決各種問題的難易程度是有影響的,例如:對于數(shù)學(xué)或者金融應(yīng)用,彩用APL語法更快。



微軟已經(jīng)創(chuàng)建了以下幾種面向CLR的編譯器 :

托管擴(kuò)展C++

C#

Visual Basic

Jscript

J#

IL匯編器



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



托管模塊



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



托管模塊的組成部分:

l PE表頭

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



l CLR表頭

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

1、 CLR版本號

2、 托管模塊入口點方法(Main方法)的元數(shù)據(jù)標(biāo)記

3、 托管模塊的元數(shù)據(jù)標(biāo)記

4、 資源

5、 強(qiáng)命名

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



l 元數(shù)據(jù)

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



l 中間語言(IL)和代碼

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



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



元數(shù)據(jù)的用處:

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

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

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

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





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

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

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

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

1.3加載通用語言運行時

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

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

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ .NETFramework \ policy



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



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



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

1. MSCorEE檢查CLR表頭以獲得Main方法的元數(shù)據(jù)標(biāo)記。

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

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

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

5. 應(yīng)用程序開始運行。



托管DLL的情形


主站蜘蛛池模板: 深爱五月激情五月 | 午夜免费视频观看在线播放 | 日本一二三区视频 | 亚洲激情在线看 | 亚洲狼人综合 | 日本视频中文字幕一区二区 | 日韩成年人视频 | 婷婷色香五月激情综合2020 | 日韩激情视频在线观看 | 欧美无遮挡国产欧美另类 | 速度与激情9在线观看 | 青春草在线免费观看 | 日韩中文字幕视频在线 | 亚洲 欧美 偷自乱 图片 | 日韩精品亚洲精品485页 | 先锋在线资源站 | 青青草原在线播放 | 伊人中文字幕 | 一级片一级毛片 | 香港三日本三级人妇三级99 | 亚洲va久久久噜噜噜久久 | 亚洲精品在线免费看 | 欧美一区二区三区在观看 | 午夜国产福利在线 | 欧美综合图片区 | 欧美夜色 | 无需付费免费mv网站 | 亚洲欧美综合网 | 青青青久97在线观看香蕉 | 日韩理论片在线观看电视 | 亚洲一区二区在线成人 | 一二三四影视大全免费观看电视剧 | 午夜视频在线网站 | 天天躁日日躁狠狠躁视频下载播二 | 亚洲上最大成网人站4438 | 在线播放性xxx欧美 在线播放色 | 日本a视频在线观看 | 午夜网站免费版在线观看 | 欧美一级第一免费高清 | 午夜性刺激免费视频观看不卡专区 | 夜色福利久久久久久777777 |