Udostępnij za pośrednictwem


Algorytm ładowania zestawu satelitarnego

Zestawy satelitarne służą do przechowywania zlokalizowanych zasobów dostosowanych do języka i kultury.

Zestawy satelitarne używają innego algorytmu ładowania niż zarządzane zestawy ogólne.

Kiedy zestawy satelitarne są ładowane?

Zestawy satelitarne są ładowane podczas ładowania zlokalizowanego zasobu.

Podstawowym interfejsem API do ładowania zlokalizowanych zasobów jest System.Resources.ResourceManager klasa . Ostatecznie klasa ResourceManager wywoła metodę GetSatelliteAssembly dla każdego CultureInfo.Name.

API wyższego poziomu mogą abstrakcyjnie przedstawiać API niskiego poziomu.

Algorytm

Proces rezerwowy zasobów platformy .NET Core obejmuje następujące kroki:

  1. Określ wystąpienie activeAssemblyLoadContext. We wszystkich przypadkach active wystąpienie jest wykonywanym zestawem AssemblyLoadContext.

  2. Wystąpienie active ładuje zestaw satelitarny dla żądanej kultury w następującej kolejności priorytetu:

    • Sprawdź jego pamięć podręczną.

    • Jeśli active jest wystąpieniem AssemblyLoadContext.Default , uruchom domyślną logikę sondowania zestawu satelitarnego (zasobu).

    • Wywołaj funkcję AssemblyLoadContext.Load.

    • Jeśli zarządzany zestaw odpowiadający zestawowi satelitarnego został załadowany z pliku, sprawdź katalog zarządzanego zestawu dla podkatalogu zgodnego z żądanym CultureInfo.Name (na przykład es-MX).

      Uwaga

      W systemach Linux i macOS podkatalog uwzględnia wielkość liter i musi spełniać jeden z następujących warunków:

      • Dokładnie pasuje do wielkości liter (rozróżniaj litery wielkie i małe)
      • Napisz małymi literami.
    • Zgłoś zdarzenie AssemblyLoadContext.Resolving.

    • AppDomain.AssemblyResolve Zgłoś zdarzenie.

  3. Jeśli zestaw satelitarny jest załadowany:

    • Zdarzenie AppDomain.AssemblyLoad jest zgłaszane.
    • Zgromadzenie jest przeszukiwane w poszukiwaniu żądanego zasobu. Jeśli środowisko uruchomieniowe znajdzie zasób w zestawie, używa go. Jeśli nie odnajdzie zasobu, kontynuuje wyszukiwanie.

    Uwaga

    Aby znaleźć zasób w zestawie satelitarnym, środowisko uruchomieniowe wyszukuje plik zasobu żądany przez ResourceManager dla aktualnego elementu CultureInfo.Name. W pliku zasobu wyszukuje żądaną nazwę zasobu. Jeśli jeden z tych nie zostanie znaleziony, zasób jest traktowany jako nie znaleziono.

  4. Następnie ResourceManager przeszukuje zestawy kultur nadrzędnych na wielu potencjalnych poziomach, za każdym razem powtarzając kroki 2 i 3.

    Każda kultura ma tylko jeden element nadrzędny, który jest definiowany przez właściwość CultureInfo.Parent.

    Wyszukiwanie kultur nadrzędnych zatrzymuje się, gdy atrybut kultury Parent jest CultureInfo.InvariantCulture.

    W przypadku elementu InvariantCulturenie wracamy do kroków 2 i 3, ale raczej kontynuujemy krok 5.

  5. Jeśli zasób nadal nie zostanie znaleziony, ResourceManager użyje zasobu kultury domyślnej (awaryjnej).

    Zazwyczaj zasoby kultury domyślnej są uwzględniane w głównym zestawie aplikacji. Można jednak określić UltimateResourceFallbackLocation.Satellite dla właściwości NeutralResourcesLanguageAttribute.Location. Ta wartość wskazuje, że ostateczną rezerwową lokalizacją zasobów jest zestaw satelitarny, a nie główny zestaw.

    Uwaga

    Domyślna kultura jest ostatecznym zapasowym. W związku z tym zalecamy, aby zawsze uwzględniać wyczerpujący zestaw zasobów w domyślnym pliku zasobów. Pomaga to zapobiec zgłaszaniu wyjątków. Posiadając kompletny zestaw, zapewniasz rezerwę dla wszystkich zasobów i upewniasz się, że co najmniej jeden zasób jest zawsze dostępny dla użytkownika, nawet jeśli nie jest kulturowo specyficzny.

  6. W końcu