現實應用系統由眾多組件構成:內部開發模組、第三方商業庫、開源套件。.NET 透過命名空間(邏輯層級)與組件(物理層級)雙重機制,實現型別的清晰組織、版本隔離與安全部署。
命名空間:邏輯層級組織
- 提供階層式型別分類體系(如
System.IO、MyApp.Services)
- 作為內部結構:專案內部模組劃分
- 作為外部結構:公開 API 的契約邊界,控制型別可見性
- 支援跨組件合併:同一命名空間可分佈於多個組件(如
System.Linq 橫跨 System.Core.dll 與 System.Data.Linq.dll)
組件:物理部署單位
- 兩種型態:應用程式(.exe,有進入點 Main)與類別庫(.dll,無進入點)
- 核心內容:組件資訊清單(名稱、版本、文化特性、公開金鑰)、型別中繼資料、IL 程式碼、資源、組件參考清單
- 可包含多模組(.netmodule),但單模組最常見
- 版本邊界:強名稱組件啟用側向執行,同一程式可載入不同版本
- 安全邊界:程式碼存取安全(CAS)以組件為單位授權
關鍵區別與協作
| 維度 | 命名空間 | 組件 |
| 層級 | 邏輯/編譯期 | 物理/執行期 |
| 版本控制 | 無 | 四部分版本號 + 強名稱 |
| 部署單位 | 否 | 是 |
| 跨組件合併 | 支援 | 不可 |
| 存取控制 | 型別/成員層級 | 組件層級 + 內部可見 |
實務啟示
- 一對一原則:盡量讓一個組件對應一個根命名空間,降低認知負荷
- 內部可見:
internal 型別/成員僅在同一組件可見,是封裝實現細節的利器
- 版本策略:公開組件簽署強名稱,啟用 GAC 或側向執行;內部組件可用簡單版本號
- 避免循環參考:組件參考圖必須為 DAG,否則編譯部署死鎖
理解命名空間與組件的雙重邊界,是掌握 .NET 大型系統架構設計、版本管理與安全部署的核心鑰匙。