.NET 中的組件

組件是 .NET 型應用程式部署、版本控制、重複使用、啟動範圍和安全性權限的基本單位。 組件是建置來共同運作及構成一個功能邏輯單位的型別與資源集合。 組件會以可執行檔 (.exe) 或動態連結程式庫 (.dll) 檔案的形式呈現,而且是 .NET 應用程式的建置區塊。 它們為通用語言執行平台提供了感知型別實作所需的資訊。

在 .NET 和 .NET Framework 中,您可以從一或多個原始程式碼檔案來建置組件。 在 .NET Framework 中,組件可以包含一或多個模組。 如此便可規劃較大型的專案,讓幾位開發人員處理個別原始程式碼檔案或模組,並將其合併以建立單一組件。 如需模組的詳細資訊,請參閱作法:建置多檔案組件

組件包含下列屬性:

  • 組件會實作為 .exe.dll 檔案。

  • 針對以 .NET Framework 為目標的程式庫,您可以藉由將組件放進全域組件快取 (GAC),在應用程式之間共用組件。 您必須先為組件設定強式名稱,才能將其放進 GAC 中。 如需詳細資訊,請參閱強式名稱的組件

  • 系統只會在需要時才將組件載入到記憶體。 若系統不需要組件,則不會執行載入程序。 因此在較大型的專案中,組件可提升資源管理效率。

  • 藉由使用反映,您能以程式設計方式取得組件的相關資訊。 如需詳細資訊,請參閱反映 (C#)Reflection (Visual Basic) (反映 (Visual Basic))。

  • 您可以使用 .NET 和 .NET Framework 上的 MetadataLoadContext 類別來載入組件並進行檢查。 MetadataLoadContext 會取代 Assembly.ReflectionOnlyLoad 方法。

Common Language Runtime 的組件

組件為 Common Language Runtime 提供了注意型別實作的所需資訊。 對於執行階段而言,型別不會存在於組件內容之外。

組件會定義下列資訊:

  • 程式碼:Common Language Runtime 執行的程式碼。 每個元件只能有一個進入點:DllMainWinMainMain

  • 安全性界限。 組件是要求和授與權限的單位。 如需組件的安全性界限詳細資訊,請參閱組件安全性考量

  • 型別界限。 每種型別的識別都包含該型別所在之組件的名稱。 在某個組件範圍中載入的型別 MyType,與在另一個組件範圍中載入的型別 MyType 不同。

  • 參考範圍界限組件資訊清單具有用來解析型別和滿足資源要求的中繼資料。 資訊清單會指定要在組件外部公開的型別和資源,並列舉其所相依的其他組件。 如果沒有相關聯的組件資訊清單,就無法執行可攜式執行檔 (PE) 中的 Microsoft 中繼語言 (MSIL) 程式碼。

  • 版本界限。 組件是 Common Language Runtime 中最小的可設定版本單位。 相同組件中的所有型別和資源都會以單位來設定版本。 組件資訊清單描述您對任何相依組件所指定的版本相依性。 如需版本設定的詳細資訊,請參閱組件版本設定

  • 部署單位:當應用程式啟動時,一定要有應用程式一開始所呼叫的組件。 至於其他組件 (例如包含當地語系化資源或公用程式類別的組件),則可視需要擷取。 此流程可讓應用程式在第一次下載時保持精簡狀態。 如需部署組件的詳細資訊,請參閱部署應用程式

  • 並存執行單位:如需執行多個組件版本的詳細資訊,請參閱組件和並存執行

建立組件

組件可以是靜態,也可以是動態。 靜態組件儲存在磁碟上的可攜式執行檔 (PE) 中。 靜態組件可以包含介面、類別和資源,例如點陣圖、JPEG 檔案和其他資源檔案。 您也可以建立動態組件,這些組件可直接從記憶體執行,而且在執行前不會儲存至磁碟中。 您可以在執行動態組件之後,再將其儲存至磁碟。

您可以使用幾種方式建立組件。 您可以使用開發工具,例如可建立 .dll.exe 檔案的 Visual Studio。 您可以使用 Windows SDK 中的工具,並搭配其他開發環境的模組來建立組件。 您也可以使用 Common Language Runtime API (例如 System.Reflection.Emit) 來建立動態組件。

透過在 Visual Studio 中建置組件、使用 .NET Core 命令列介面工具建置組件,或透過命令列編譯器建置 .NET Framework 組件,藉此進行組件編譯作業。 如需使用 .NET CLI 建置元件的詳細資訊,請參閱.NET CLI 概觀

注意

若要在 Visual Studio 中建置組件,請在 [建置] 功能表中選取 [建置]。

資訊清單

每個組件都有組件資訊清單檔。 類似於目錄,組件資訊清單包含︰

  • 組件的身分識別 (其名稱和版本)。

  • 一個檔案表格,描述構成該組件的所有其他檔案,例如由您建立且為 .exe.dll 檔案所相依的其他組件,點陣圖檔或讀我檔案。

  • 組件參考清單,這是所有外部相依性的清單,例如 .dll 或其他檔案。 組件參考同時包含全域和私用物件的參考。 所有其他應用程式皆可使用全域物件。 在 .NET Core 中,全域物件會與特定的 .NET Core 執行階段結合。 在 .NET Framework 中,全域物件會位於全域組件快取 (GAC)。 System.IO.dll 是 GAC 中的組件範例。 私人物件必須位於您安裝應用程式所在目錄 (或其底下) 的目錄層級。

組件包含內容、版本設定和相依性的相關資訊。 因此,使用這些組件的應用程式無須依賴外部來源 (例如 Windows 系統上的登錄) 即可正常運作。 組件可減少 .dll 衝突,並讓您的應用程式更可靠且更容易部署。 在許多情況下,您只要將 .NET 型應用程式的檔案複製到目標電腦,即完成安裝。 如需詳細資訊,請參閱組件資訊清單

將參考新增至組件

若要在應用程式中使用組件,您必須先將參考新增至組件。 將參考新增至組件後,您的應用程式即可使用所有可存取的類型、屬性、方法及其命名空間的其他成員,他們的程式碼就如同您來源檔案的一部分。

注意

系統會自動參考 .NET 類別庫中的大多數組件。 如果未自動參考系統組件,請以下列其中一種方式新增參考:

  • 針對 .NET 和 .NET Core,將參考新增至包含組件的 NuGet 套件中。 在 Visual Studio 中使用 NuGet 套件管理員,或將組件的 <PackageReference> 元素新增至 .csproj.vbproj 專案。
  • 針對 .NET Framework,請使用 Visual Studio 中的 [新增參考] 對話方塊,或者 C#Visual Basic 編譯器的 -reference 命令列選項,來將參考新增至組件。

在 C# 中,您可以在單一應用程式中使用同一組件的兩種版本。 如需詳細資訊,請參閱外部別名

標題 描述
組件內容 構成組件的元素。
組件資訊清單 組件資訊清單中的資料,以及其儲存在組件中的方式。
全域組件快取 GAC 如何儲存和使用組件。
強式名稱組件 強式名稱的組件特性。
組件安全性考量 組件安全性的運作方式。
組件版本控制 .NET Framework 版本原則的概觀。
組件放置 組件的位置。
組件和並存執行 同時使用多個版本的執行階段或組件。
發出動態方法和組件 如何建立動態組件。
執行階段如何找出組件 .NET Framework 如何在執行階段中解析組件參考。

參考

System.Reflection.Assembly

另請參閱