Sdílet prostřednictvím


Algoritmus načítání satelitních sestavení

Satelitní sestavení slouží k ukládání lokalizovaných prostředků přizpůsobených pro jazyk a jazykovou verzi.

Satelitní sestavení používají jiný algoritmus načítání než obecná spravovaná sestavení.

Kdy jsou načtena satelitní sestavení?

Při načítání lokalizovaného prostředku se načtou satelitní sestavení.

Základní rozhraní API pro načtení lokalizovaných prostředků je System.Resources.ResourceManager třída. Nakonec ResourceManager třída bude volat metodu GetSatelliteAssembly pro každý CultureInfo.Name.

Rozhraní API vyšší úrovně mohou abstraktovat rozhraní API nízké úrovně.

Algoritmus

Proces náhradního prostředku .NET Core zahrnuje následující kroky:

  1. Určete active AssemblyLoadContext instanci. Ve všechpřípadechch active AssemblyLoadContext

  2. Instance active načte satelitní sestavení pro požadovanou jazykovou verzi v následujícím pořadí priority:

    • Zkontrolujte jeho mezipaměť.

    • Pokud active se jedná o instanci, spusťte výchozí logiku AssemblyLoadContext.Default sondování sestavení satelitního (prostředku).

    • Volejte AssemblyLoadContext.Load funkci.

    • Pokud bylo spravované sestavení odpovídající satelitnímu sestavení načteno ze souboru, zkontrolujte adresář spravovaného sestavení pro podadresář, který odpovídá požadovanému CultureInfo.Name (například es-MX).

      Poznámka:

      V Linuxu a macOS se v podadresáři rozlišují malá a velká písmena a musí:

      • Přesně shodný případ.
      • Buďte v malých písmenech.
    • Vyvolání AssemblyLoadContext.Resolving události

    • Vyvolání AppDomain.AssemblyResolve události

  3. Pokud je načteno satelitní sestavení:

    • Událost AppDomain.AssemblyLoad je vyvolána.
    • Sestavení se vyhledá požadovaný prostředek. Pokud modul runtime najde prostředek v sestavení, použije ho. Pokud prostředek nenajde, bude pokračovat ve vyhledávání.

    Poznámka:

    Pokud chcete najít prostředek v rámci satelitního sestavení, modul runtime vyhledá soubor prostředků požadovaný ResourceManager pro aktuální CultureInfo.Name. V souboru prostředků vyhledá požadovaný název prostředku. Pokud se některý z těchto prostředků nenajde, prostředek se považuje za nenalezeno.

  4. Při ResourceManager dalším hledání sestavení nadřazené jazykové verze prostřednictvím mnoha potenciálních úrovní, pokaždé, když opakuje kroky 2 a 3.

    Každá jazyková verze má pouze jeden nadřazený objekt, který je definován vlastností CultureInfo.Parent .

    Vyhledávání nadřazených jazykových verzí se zastaví, když je CultureInfo.InvariantCulturevlastnost jazykové verze Parent .

    V případě InvariantCulturekroků 2 a 3 se nevrátíme, ale pokračujte krokem 5.

  5. Pokud se prostředek stále nenajde, ResourceManager použije prostředek pro výchozí (záložní) jazykovou verzi.

    Prostředky pro výchozí jazykovou verzi jsou obvykle zahrnuty do hlavního sestavení aplikace. Pro vlastnost však můžete zadat UltimateResourceFallbackLocation.Satellite NeutralResourcesLanguageAttribute.Location . Tato hodnota označuje, že konečným záložním umístěním pro prostředky je satelitní sestavení místo hlavního sestavení.

    Poznámka:

    Výchozí jazyková verze je konečným náhradním řešením. Proto doporučujeme, abyste do výchozího souboru prostředků vždy zahrnuli vyčerpávající sadu prostředků. To pomáhá zabránit vyvolání výjimek. Když budete mít vyčerpávající sadu, poskytnete náhradní prostředky pro všechny prostředky a zajistíte, aby byl pro uživatele vždy k dispozici alespoň jeden prostředek, i když není kulturní.

  6. Nakonec