部分組件參考

完整的組件參考包括組件的文字名稱、版本、文化特性和公開金鑰語彙基元 (如果組件具有強式名稱的話)。 如果您參考 Common Language Runtime 或全域組件快取中的任何組件,就需要完整的組件參考。 您也可以只提供部分資訊 (例如只指定組件名稱),用動態方式參考組件。

不建議使用部分組件參考,因為部分組件參考可能會導致版本號碼的控制問題:

  • 組件的版本可能不具有回溯相容性 (Backward Compatible)。 例如,您的程式碼可以在 1.6 版的組件上執行,但是因為使用了部分組件參考,所以您可能會取得內含不相容變更的新版組件。

  • 組件的版本可能不具有新版相容性。 例如,您的程式碼可以在 1.6 版的組件上執行,但是因為使用部分組件參考,所以您可能會取得缺少必要程式碼的舊版組件。

  • 安裝新版組件的應用程式可能會在與新版不相容時,中斷使用部分組件參考來載入該組件的應用程式。

因為出現版本控制問題的可能性很大,因此在 .NET Framework 2.0 版內已將 LoadWithPartialName 方法標記為已經過時。

建立部分組件參考

您可以用下列其中一種方式,在程式碼中部分參考組件:

注意事項注意事項

LoadWithPartialName 方法在 .NET Framework 2.0 版中已過時淘汰。

使用 LoadWithPartialName 方法可將多變性引入繫結處理序。 例如,如果您要求以強式名稱繫結至組件,但沒有把公開金鑰包含在您的參考中,您對繫結的組件是否來自預期的發行者將沒有把握。 此外,不包含公開金鑰語彙基元 (Token) 的參考並不受版本原則的支配,所以不會檢查應用程式和電腦組態檔。 當您想要選用最新版本的組件時,使用 LoadWithPartialName 方法的部分參考最適合。

使用 LoadWithPartialName 方法的部分參考

注意事項注意事項

LoadWithPartialName 方法在 .NET Framework 2.0 版中已過時淘汰。

LoadWithPartialName 方法呼叫至少必須包含組件的文字名稱,但是也可以包含公開金鑰語彙基元、版本和文化特性。 由於您所使用的方法只預期有部分參考,因此您不需要包含完整的參考資訊 (名稱、版本、文化特性和可用的公開金鑰語彙基元)。

當您使用 LoadWithPartialName 方法部分參考組件時,Runtime 會使用特定的規則來找出參考的組件。 這些規則包括:

  1. Runtime 會檢查應用程式組態檔中是否有 <qualifyAssembly> 項目中參考的限定資訊。 如果找到有效的項目,繫結便會依照所有完整參考的方式繼續進行。

  2. 接著執行階段會搜尋應用程式目錄中是否有符合指定組件文字名稱的組件。 如果找到符合的項目,Runtime 便會使用該組件。

  3. 如果在應用程式目錄中沒有找到符合的項目,Runtime 會再檢查全域組件快取中的組件。 如果在部分參考中有指定公開金鑰語彙基元、版本或文化特性,Runtime 會嘗試完整比對該值。 如果沒有指定版本,Runtime 會嘗試找出具有最新版本號碼,而且符合其他指定準則的組件。 如果沒有指定文化特性或公開金鑰語彙基元,Runtime 的行為未定義。

    例如,假設呼叫 Assembly.LoadWithPartialName("math, Version 5.0.0.0"),而且全域組件快取的內容如下:

    math,version=5.0.0.0,publicKeyToken=11111111,culture=de
    math,version=5.0.0.0,publicKeyToken=22222222,culture=en
    

    呼叫的結果未定義。 Runtime 會選取它所遇到的第一個組件。

    另一個範例是,假設呼叫 Assembly.LoadWithPartialName("math"),而且全域組件快取的內容如下:

    math,version=5.0.0.0,publicKeyToken=11111111,culture=neutral
    math,version=6.0.0.0,publicKeyToken=22222222,culture=neutral
    

    呼叫的結果會繫結至 math 組件,版本為 6.0.0.0。

    最後一個範例是,假設呼叫 Assembly.LoadWithPartialName("math,publicKeyToken=11111111"),而且全域組件快取的內容如下:

    math,version=5.0.0.0,publicKeyToken=11111111,culture=neutral
    math,version=6.0.0.0,publicKeyToken=22222222,culture=neutral
    

    呼叫的結果會繫結至 math 組件,版本為 5.0.0.0。

包含限定資訊的部分參考

您也可以使用 System.Reflection.Assembly.Load 之類的方法來進行動態參考,並且只提供部分參考,但是您可以接著使用應用程式組態檔中的 <qualifyAssembly> 項目來限定參考。 這個項目可讓您在應用程式組態檔中提供完整的參考資訊 (名稱、版本、文化特性和可用的公開金鑰語彙基元),而不是在程式碼中提供。

注意事項注意事項

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

請參閱

概念

執行階段如何找出組件

步驟 1:檢查組態檔

步驟 2:檢查先前參考的組件

步驟 3:檢查全域組件快取

步驟 4:透過程式碼基底或探查找出組件