Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz 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 . 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:
activeAssemblyLoadContext Określanie wystąpienia. 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:
- 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
nullwartość .