Runtime 如何找出組件

若要成功部署您的 .NET Framework 應用程式,您必須熟悉 Common Language Runtime 如何找出並繫結至構成您應用程式的組件。預設情況下,Runtime 會試著與應用程式所用以建置的組件的正確版本繫結。這個預設行為可以由組態檔設定來覆寫。

Common Language Runtime 嘗試找出組件並解析組件參考時會執行一些步驟。各個步驟將在下列章節中說明。詞彙「探查」經常被使用說明 Runtime 如何找出組件;它意指一種啟發方式的集合,用以根據組件名稱和文化特性 (Culture) 來找出組件。

**注意   **您可以使用包含於 .NET Framework SDK 中的組件繫結記錄檔檢視器 (Fuslogvw.exe) 在記錄檔中檢視繫結資訊。

初始化繫結

尋找和繫結組件的處理序是在 Runtime 嘗試解析另一個組件的參考時開始。這個參考可以是靜態或動態的。編譯器 (Compiler) 於建置階段在組件資訊清單 (Assembly Manifest) 的中繼資料 (Metadata) 中記錄靜態參考。動態參考則在產生於呼叫各種方法的執行過程中建構,例如 System.Reflection.Assembly.Load

參考組件的最佳方式為使用完整參考,包括組件名稱、版本、文化特性和公開金鑰語彙基元 (只要有一個存在的話)。Runtime 會依照這個章節稍後說明的步驟,使用這項資訊來找出組件。不論是否為靜態或動態組件的參考,Runtime 都使用相同的解析過程。

您也可以提供只包含部分資訊的呼叫方法 (例如只指定組件名稱),來動態參考組件。在這種情況下,只會搜尋應用程式目錄中的組件,而不會進行其他檢查。進行部分參考時可以使用載入組件的任何方法,例如 System.Reflection.Assembly.Load 或 AppDomain.Load。如果您希望 Runtime 要在全域組件快取以及應用程式目錄中檢查參考的組件,可以使用 System.Reflection.Assembly.LoadWithPartialName 方法來指定部分參考。如需部分繫結的詳細資訊,請參閱部分組件參考

最後,您可以使用 System.Reflection.Assembly.Load 之類的方法來進行動態參考,並且只提供部分資訊;然後使用應用程式組態檔中的 <qualifyAssembly> 項目來限定參考。這個項目可讓您在應用程式組態檔中提供完整的參考資訊 (名稱、版本、文化特性和可用的公開金鑰語彙基元),而不是在程式碼中提供。如果您想要完整限定參考應用程式目錄之外的組件,或者如果您想要參考全域組件快取中的組件,但是為了方便又希望能在組態檔中指定完整參考,而不是在程式碼中指定的話,就可以使用這個技巧。

**注意   **在多個應用程式之間共用的組件不能使用這種類型的部分參考。這是因為組態設定是依照應用程式套用,而不是依照組件套用,因此使用這種類型部分參考的共用組件,會要求使用共用組件的每一個應用程式組態檔中都要有限定資訊。

Runtime 使用下列步驟解析組件參考:

  1. 決定正確的組件版本,藉由檢查適用的組態檔,包括應用程式組態檔、發行者原則檔和電腦組態檔。如果組態檔位於遠端電腦,Runtime 必須首先找出並下載應用程式組態檔。
  2. 檢查組件名稱是否先前已經被繫結,若果真如此,則使用先前載入的組件。
  3. 檢查全域組件快取。如果組件在那裡找到,Runtime 即使用這個組件。
  4. 探查組件,使用下列步驟:
    1. 如果組態和發行者原則不會影響原始參考,並且如果繫結要求是使用 Assembly.LoadFrom 方法來建立的,Runtime 會檢查位置提示。

    2. 如果基礎碼存在於組態檔,Runtime 只會檢查這個位置。如果這個探查失敗,Runtime 將斷定繫結要求失敗,並且沒有其他探查會發生。

    3. 使用啟發方式的組件探查會在探查章節中說明。如果探查之後沒有找到組件,Runtime 會要求 Windows Installer 提供組件。這將扮演隨選安裝的功能。

      **注意   **對於沒有強式名稱 (Strong Name) 的組件並沒有版本檢查,對於全域組件快取中沒有強式名稱的組件也沒有 Runtime 檢查。

請參閱

部署案例 | 步驟 1:檢查組態檔 | 步驟 2:檢查先前參考的組件 | 步驟 3:檢查全域組件快取 | 步驟 4:透過基礎碼或探查找出組件 | 部份組件參考 | 部署 .NET Framework 應用程式