Sdílet prostřednictvím


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

Satelitní sestavení se používají k ukládání lokalizovaných prostředků přizpůsobených pro jazyk a kulturu.

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í API pro načtení lokalizovaných prostředků je System.Resources.ResourceManager třída. Nakonec třída ResourceManager zavolá metodu GetSatelliteAssembly pro každý CultureInfo.Name.

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

Algoritmus

Proces přechodu na náhradní prostředky v .NET Core zahrnuje následující kroky:

  1. Určete activeAssemblyLoadContext instanci. Ve všech případech je instance active spouštěcím sestavením 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.Defaultsondování sestavení satelitního (prostředku).

    • Zavolejte funkci AssemblyLoadContext.Load.

    • 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í buď:

      • 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 nenajde prostředek, pokračuje 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. Při vyhledávání v souboru prostředků hledá 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 následném prohledávání sestavení nadřazené jazykové verze na různých úrovních se pokaždé opakuje kroky 2 a 3.

    Každá kultura má pouze jednoho nadřazeného rodiče, který je definován vlastností CultureInfo.Parent .

    Vyhledávání nadřazených kultur se zastaví, když je vlastnost ParentCultureInfo.InvariantCulture.

    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í kulturní verzi.

    Prostředky pro výchozí jazykovou verzi jsou obvykle zahrnuty do hlavního sestavení aplikace. Pro vlastnost však můžete zadat UltimateResourceFallbackLocation.SatelliteNeutralResourcesLanguageAttribute.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í kultura je konečnou záložní možností. 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 záložní zdroje pro všechny prostředky a zajistíte, aby byl pro uživatele vždy k dispozici alespoň jeden zdroj, i když není kulturně specifický.

  6. Nakonec