Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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:
Określ wystąpienie
activeAssemblyLoadContext. We wszystkich przypadkachactivewystą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
activejest 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.
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.
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.
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.
W końcu
- Jeśli środowisko uruchomieniowe nie znajdzie pliku zasobu dla domyślnej (rezerwowej) kultury, zostanie zgłoszony wyjątek MissingManifestResourceException lub MissingSatelliteAssemblyException.
- Jeśli plik zasobu zostanie znaleziony, ale żądany zasób nie jest obecny, żądanie zwróci
nulljako wartość.