C# 程序集是啥
程序集,對于C#程序員來說一定不陌生,不就是VS生成的那些exe,dll么。是的,程序集(.net中exe與dll的區別就是exe有程序接入口, 即Main函數)就是.net框架下,可以被CLR加載并運行的一堆數據集(類似java中的jar包,無法脫離虛擬機自己運行)。它們和之前C\C++ 生成的可執行程序和動態鏈接庫有本質的區別。
說了半天,程序集里到底有什么呢。作為一堆數據集,程序集的數據可以分為:類型元數據,程序元數據,IL代碼,資源。
先說下什么是元數據,元數據一般就是指描述自身的數據。
程序集元數據:包含程序集的版本信息,安全信息,簽名等。
類型元數據:記錄了程序集將引用了哪些類,用戶自定義了哪些類,字段,數據類型等一系列信息(VS的編程助手靠的就是反射獲取類型元數據)。
IL代碼:MSIL,微軟中間語言,微軟跨語言的根基所在,所有的C#代碼都編譯成IL代碼,保存在程序集中,在被CLR加載后,由JIT調用BCL,FTL即時編譯成機器碼來讓CPU運行。
資源:圖片,視頻,音頻不一而足。
那么為什么程序集要包含這么多數據呢?有沒有想過?
其實程序集是完全自我描述性的,它是一個邏輯單元,而不是一個物理單元。它包含程序的元數據,這樣就可以被其他的應用程序或者程序集直接調用,而不需要像以前的COM組件一樣要去指定注冊表或其他數據源。而且,即使程序集分散在幾個不同的地方,也不會造成因為各個文件信息不同步而調用錯誤的情況,因為包含程序集入口的文件也包含了其他文件的位置,散列和內容。若一個文件被替換,在加載的時候會被檢測出來,拒絕程序集加載。
總結
- 上一篇: 使用命令行的方式,将ini配置文件中的配
- 下一篇: 【librosa】音频特征提取