CLR 程式集和命名空間

2022-07-07 09:42:10 字數 1646 閱讀 6946

控制台應用program並非只是含有元資料的pe檔案,他還是程式集(assembly)。程式集是乙個或多個型別定義檔案及資源檔案的集合。在程式及的所有檔案中,有乙個檔案容納了清單(manifest)。清單也是乙個元資料表集合,表中主要包含作為程式集組成部分的那些檔案的名稱。此外,還描述了程式集的版本、語言文化、發布者、公共匯出的型別以及構成程式集的所有檔案。

clr操作的是程式集。換而言之,clr總是首先載入包含清單元資料表的檔案,再根據清單來獲取程式集中的其他檔案的名稱。下面列出了程式集的重要特點。

1 程式集定義了可重用的型別

2 程式集用乙個版本號標記

3 程式集可以管理安全資訊

除了包含清單元資料表的檔案,程式集其他單獨的檔案並不具備上述特點。

型別為了順利地進行打包、版本控制、安全保護以及使用,必須放在座位程式集一部分的模組中。程式集大多數時候只有乙個檔案,就像前面的program.exe那樣。然後,程式集還可以由多個檔案構成:一些事含有元資料的pe檔案,另一些是.gif或.jpg這樣的資源檔案。為便於理解,可將程式集視為乙個邏輯exe或dll。

使用多檔案程式集的額外三個理由

2 可在程式集中新增資源或資料檔案。例如,假定乙個型別的作用是計算保險資訊,需要訪問精算表才能完成計算。在這種情況下,不必在自己的源**中簽入精算表。相反,可以使用有乙個工具,使資料檔案稱為程式集的一部分。資料檔案可為任意格式——只要應用程式知道如何解析。

3 程式集包含的各個型別可以用不同的編碼程式語言來實現。然後 可以用工具將所有模組合併成單個程式集。

總之,程式集是進行重用、版本控制和應用安全性設定的基本單元。它允許將型別和資源檔案劃分到單獨的檔案中。這樣一來,無論你自己還是使用者,都可以決定打包和部署那些檔案,一旦clr載入還有清單的檔案,就可確定在程式集的其他檔案中。

命名空間對相關的型別進行邏輯分組,開發人員可通過命名空間方便地定位型別。例如,system.test命名空間定義了執行字串處理的型別,而system.io命名空間定義了執行i/o操作的型別。

對於編譯器,命名空間的作用就是為型別名稱附加以句點分隔的符號,使名稱變得更長,更可能具有唯一性。

命名空間更多的是對編譯器和我們這些寫**的人而言的概念,方便我們的編寫和編譯。clr對「命名空間」一無所知。訪問型別時,clr需要知道型別的完整名稱(可能是相當長的、包含句點符號的名稱)以及該型別的定義具體在哪個程式集中,這樣「執行時」才能載入正確程式集找到目標型別,並對其進行操作。

using指令簡化了型別名稱,編譯器會對當前**中未識別的型別自動去匹配using 中引用的命名空間,直到找到對應型別。當然也會有潛在問題:可能兩個或更多型別在不同命名空間中同名。為了消除歧義,必須顯式告訴編譯器需要需要生死用哪個型別。

c# using指令的另一種形式允許為型別或命名空間建立別名。如果只想使用命名空間中的少量**,不想它的所有型別都跑出來「汙染」全域性命名空間,別名就顯得十分方便。

using a=wwwwww.asdasd;

注意:命名空間和程式集不一定相關。特別是,同乙個命名空間中的型別可能在不同程式集中實現。同乙個程式集也可能包含不同命名空間中的型別,例如system.int32和system.text.stringbuilder型別都在mscorlib.dll程式集中。

CLR 共享程式集和強命名程式集

2017年08月12日 23 36 52 生活常識 閱讀數 187 clr支援兩種型別的程式集 弱命名程式集 weakly named assembly 和強命名程式集 strongly named assembly 二者的區別 強命名程式集使用發布者的公鑰 私鑰進行了簽名。這一堆金鑰允許對程式集進...

CLR 關於強命名程式集

如何建立強命名程式集 strong name assembly 建立乙個強命名程式集首先需要獲得乙個用強命名實用工具 strong name utility,即sn.exe,net sdk自帶 產生的金鑰。下面簡要介紹一下sn.exe的一些用法。要產生乙個公鑰 私鑰對 a sn k mycompan...

CLR 關於強命名程式集

如何建立強命名程式集 strong name assembly 建立乙個強命名程式集首先需要獲得乙個用強命名實用工具 strong name utility,即sn.exe,net sdk自帶 產生的金鑰。下面簡要介紹一下sn.exe的一些用法。要產生乙個公鑰 私鑰對 a sn k mycompan...