共用方式為


人造衛星組裝載入演算法

衛星組件可用來儲存為文化語言自訂的區域資源。

衛星組件使用的載入演算法不同於一般的受控組件。

衛星組件何時載入?

當載入在地化資源時,會載入衛星組件。

載入當地語系化資源的基本 API 是 System.Resources.ResourceManager 類別。 最後,ResourceManager 類別會針對每一個 GetSatelliteAssembly 呼叫 CultureInfo.Name 方法。

較高層級的 API 可以擷取低層級的 API。

演算法

.NET Core 資源後援處理序包含下列步驟:

  1. 確定 activeAssemblyLoadContext 執行個體。 在所有情況下,active 執行個體均為執行組件的 AssemblyLoadContext

  2. active 執行個體會依照以下優先順序載入所要求文化的衛星組件:

  3. 當載入附屬組件時:

    • 便會引發 AppDomain.AssemblyLoad 事件。
    • 系統會搜尋組件,尋找所要求的資源。 如果執行階段在組件中找到資源,則會使用它。 如果找不到資源,會繼續搜尋。

    注意

    為了在附屬組件內尋找資源,執行階段會搜尋當前 CultureInfo.NameResourceManager 所請求的資源檔案。 在資源檔案內,搜尋所要求的資源名稱。 如果找不到任一個,就會將資源視為找不到。

  4. ResourceManager 接下來會透過多個可能的層級搜尋父文化組件,每次均會重複執行步驟 2 和 3。

    每一種文化只有一個父代,由CultureInfo.Parent屬性所定義。

    當文化特性的 Parent 屬性是 CultureInfo.InvariantCulture 時,即會停止搜尋父文化特性。

    針對 InvariantCulture,我們不會回到步驟 2 和 3,而是繼續執行步驟 5。

  5. 如果仍然找不到資源,則 ResourceManager 會使用預設 (後援) 文化特性的資源。

    通常,主要應用程式組件中會包含預設文化特性的資源。 不過,您可以為 UltimateResourceFallbackLocation.Satellite 屬性指定 NeutralResourcesLanguageAttribute.Location 。 此值指出資源的最終後援位置是附屬組件,而不是主要組件。

    注意

    預設語系是最終備援。 因此,建議您一律在預設資源檔中包含一組完整資源。 這樣有助於防止拋出例外狀況。 在擁有一整套資源之後,您可以為所有資源提供備援,並確保使用者至少擁有一個資源,即使該資源不是文化特定的。

  6. 最後