Algoritm för inläsning av satellitsammansättning
Satellitsammansättningar används för att lagra lokaliserade resurser anpassade för språk och kultur.
Satellitsammansättningar använder en annan inläsningsalgoritm än allmänna hanterade sammansättningar.
När läses satellitsammansättningar in?
Satellitsammansättningar läses in när en lokaliserad resurs läses in.
Det grundläggande API:et System.Resources.ResourceManager för att läsa in lokaliserade resurser är klassen. I slutändan ResourceManager anropar GetSatelliteAssembly klassen metoden för varje CultureInfo.Name.
API:er på högre nivå kan abstrahera API:et på låg nivå.
Algoritm
Återställningsprocessen för .NET Core-resurser omfattar följande steg:
Fastställ instansen
active
AssemblyLoadContext . I samtliga fall är instansenactive
den körande sammansättningens AssemblyLoadContext.Instansen
active
läser in en satellitsammansättning för den begärda kulturen i följande prioritetsordning:Kontrollera dess cacheminne.
Om
active
är instansen AssemblyLoadContext.Default kör du standardlogik för satellitsammansättning (resurs).Anropa funktionen AssemblyLoadContext.Load.
Om den hanterade sammansättningen som motsvarar satellitsammansättningen lästes in från en fil kontrollerar du katalogen för den hanterade sammansättningen efter en underkatalog som matchar den begärda CultureInfo.Name (till exempel
es-MX
).Kommentar
I Linux och macOS är underkatalogen skiftlägeskänslig och måste antingen:
- Exakt matchningsfall.
- Var i gemener.
Höj händelsen AssemblyLoadContext.Resolving .
Höj händelsen AppDomain.AssemblyResolve .
Om en satellitsammansättning läses in:
- Händelsen AppDomain.AssemblyLoad aktiveras.
- Sammansättningen söks efter den begärda resursen. Om körningen hittar resursen i sammansättningen använder den den. Om den inte hittar resursen fortsätter sökningen.
Kommentar
För att hitta en resurs i satellitsammansättningen söker körningen efter resursfilen som begärs av ResourceManager för den aktuella CultureInfo.Name. I resursfilen söker den efter det begärda resursnamnet. Om någon av dem inte hittas behandlas resursen som inte hittad.
Nästa ResourceManager söker igenom de överordnade kultursammansättningarna genom många potentiella nivåer, varje gång upprepa steg 2 och 3.
Varje kultur har bara en överordnad CultureInfo.Parent , vilket definieras av egenskapen.
Sökningen efter överordnade kulturer stoppas när en kulturs Parent egenskap är CultureInfo.InvariantCulture.
InvariantCultureFör går vi inte tillbaka till steg 2 och 3, utan fortsätter i stället med steg 5.
Om resursen fortfarande inte hittas ResourceManager använder resursen för standardkulturen (återställning).
Vanligtvis ingår resurserna för standardkulturen i huvudprogramsammansättningen. Du kan dock ange UltimateResourceFallbackLocation.Satellite för egenskapen NeutralResourcesLanguageAttribute.Location . Det här värdet anger att den ultimata återställningsplatsen för resurser är en satellitsammansättning snarare än huvudsammansättningen.
Kommentar
Standardkulturen är den ultimata reserven. Därför rekommenderar vi att du alltid inkluderar en fullständig uppsättning resurser i standardresursfilen. Detta förhindrar att undantag utlöses. Genom att ha en fullständig uppsättning ger du en reserv för alla resurser och ser till att minst en resurs alltid finns för användaren, även om den inte är kulturellt specifik.
Slutligen
- Om körningen inte hittar en resursfil för en standardkultur (återställning) genereras ett eller MissingSatelliteAssemblyException ett MissingManifestResourceException undantag.
- Om resursfilen hittas men den begärda resursen inte finns returnerar
null
begäran .