程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 【C#進階系列】02 生成、打包、部署和管理應用程序及類型——還是那個Hello world,

【C#進階系列】02 生成、打包、部署和管理應用程序及類型——還是那個Hello world,

編輯:C#入門知識

【C#進階系列】02 生成、打包、部署和管理應用程序及類型——還是那個Hello world,


好了,還是這張圖,還是一樣的Hello world。

因為本章其實很多都是講一些命令行編譯啊什麼鬼的配置類的東西,要用的時候直接百度或者回頭查書就可以了,

所以了解一下也就行了,也沒有記錄下來,接下來講得只是我認為很有用的東西。

關於引用

請看上圖,MyTest程序集下面有個引用,引用裡面大家都知道有很多dll,而我們的源代碼中只有那5個using引用某dll裡的具體的命名空間。

(引用這些dll只會對編譯器造成一點影響,並不會影響最終生成的文件,更不會去影響最終的性能)

也就是說,無論你引用多少個dll,你的源代碼中只使用那5個using,那麼最終引用的實際上只有包含這5個using的那些dll文件。

再說PE文件,程序集,托管模塊,元數據

之前我們說了托管PE文件(也就是那些exe,dll)包括4個部分:PE頭、CLR頭、元數據和IL代碼。

其中PE頭是windows要求的標准信息,CLR頭是托管模塊特有的,包括CLR版本號,模塊的入口方法,數字簽名,模塊內部元數據表的大小和偏移。

 

 

元數據是由幾個表構成的二進制塊,有三種元數據表:定義表,引用表和清單表。

 

所謂定義表,主要就是對本模塊內部的一些屬性,方法什麼的一個描述。

 

所謂引用表,主要就是對引用的程序集內部的一些屬性,方法什麼的一個描述。

 

所謂清單表,主要就是對程序集組成的那部分文件的信息。

 

 

程序集是進行重用、版本控制和應用安全性設置的基本單元。允許有將類型和資源文件劃分到單獨的文件中。(程序需要加載的程序集數量越少,性能越好,因為這樣有助於減小工作集,緩解進程空間地址碎片化)

CLR操作的就是程序集,先加載包含清單元數據表的文件,再根據清單來獲取程序集中其它文件的名稱。

 

好吧,我們主要還是來講上述四者的關系

結合上圖的Hello world程序,來看看我自己的理解:

源代碼都會生成托管PE文件,也叫托管模塊,就是那些dll和exe,而一個托管模塊包含:PE頭、CLR頭、元數據定義表、元數據引用表和IL代碼。

而這些托管模塊和一些圖片啊什麼的資源文件,再加上一個元數據清單表就組合成了程序集(程序集是一個邏輯上的概念)。

一個PE文件也可以僅僅只是一個托管模塊,也可以是一個程序集,而區分一個PE文件是托管模塊還是程序集的關鍵就是看它有沒有元數據清單表。

那麼最通俗的講,a.EXE引用了b.dll,那麼a.exe就是一個程序集,但是b.dll引用了c.dll那麼b.dll其實也是一個程序集。

同時a,b,c都是托管PE文件,都是托管模塊。

 

可能饒了點,上述理解中如有纰漏還望看到的大神指出,以免本人在錯誤的道路上越走越遠。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved