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 . ResourceManager Ostatecznie klasa wywoła metodę GetSatelliteAssembly dla każdego CultureInfo.Nameelementu .
Interfejsy API wyższego poziomu mogą abstrakcji interfejsu API niskiego poziomu.
Algorytm
Proces rezerwowy zasobów platformy .NET Core obejmuje następujące kroki:
active
AssemblyLoadContext Określanie wystąpienia. We wszystkich przypadkachactive
wystąpienie jest wykonywanym zestawem AssemblyLoadContext.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:
- Dokładnie pasuje do wielkości liter.
- W małych literach.
AssemblyLoadContext.Resolving Zgłoś zdarzenie.
AppDomain.AssemblyResolve Zgłoś zdarzenie.
Jeśli zestaw satelitarny jest ładowany:
- Zdarzenie AppDomain.AssemblyLoad jest zgłaszane.
- Zestaw jest wyszukiwany dla żądanego zasobu. Jeśli środowisko uruchomieniowe znajdzie zasób w zestawie, używa go. Jeśli zasób nie zostanie odnaleźć, kontynuuje wyszukiwanie.
Uwaga
Aby znaleźć zasób w zestawie satelitarnym, środowisko uruchomieniowe wyszukuje plik zasobu żądany przez ResourceManager element dla bieżącego CultureInfo.Nameelementu . W pliku zasobu wyszukuje żądaną nazwę zasobu. Jeśli jeden z tych nie zostanie znaleziony, zasób jest traktowany jako nie znaleziono.
Następne ResourceManager wyszukiwanie zestawów kultury nadrzędnej za pomocą wielu potencjalnych poziomów przy każdym powtarzaniu kroków 2 i 3.
Każda kultura ma tylko jeden element nadrzędny, który jest definiowany CultureInfo.Parent przez właściwość .
Wyszukiwanie kultur nadrzędnych zatrzymuje się, gdy właściwość kultury Parent to CultureInfo.InvariantCulture.
W przypadku elementu InvariantCulturenie wracamy do kroków 2 i 3, ale raczej kontynuujemy krok 5.
Jeśli zasób nadal nie zostanie znaleziony, ResourceManager użyje zasobu dla kultury domyślnej (rezerwowej).
Zazwyczaj zasoby kultury domyślnej są uwzględniane w głównym zestawie aplikacji. Można jednak określić UltimateResourceFallbackLocation.Satellite właściwość 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 rezerwowym. 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. Mając wyczerpujący zestaw, należy podać rezerwę dla wszystkich zasobów i upewnić się, że co najmniej jeden zasób jest zawsze obecny dla użytkownika, nawet jeśli nie jest on specyficzny kulturowo.
W końcu
- Jeśli środowisko uruchomieniowe nie znajdzie pliku zasobu dla domyślnej (rezerwowej) kultury, zgłaszany MissingManifestResourceException jest wyjątek lub MissingSatelliteAssemblyException .
- Jeśli plik zasobu zostanie znaleziony, ale żądany zasób nie jest obecny, żądanie zwróci
null
wartość .