Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Gli assembly satellite vengono usati per archiviare le risorse localizzate personalizzate per lingua e cultura.
Gli assembly satelliti utilizzano un algoritmo di caricamento diverso rispetto agli assembly gestiti in generale.
Quando vengono caricati gli assembly satellite?
Gli assembly satellite vengono caricati durante il caricamento di una risorsa localizzata.
L'API di base per caricare le risorse localizzate è la classe System.Resources.ResourceManager. In definitiva, la classe ResourceManager chiamerà il metodo GetSatelliteAssembly per ogni CultureInfo.Name.
Le API di livello superiore possono astrarre l'API di basso livello.
Algoritmo
Il processo di fallback per le risorse di .NET Core include i passaggi seguenti:
Determinare l'istanza
activeAssemblyLoadContext. In tutti i casi, l'istanzaactiveè il AssemblyLoadContext dell’assembly in esecuzione.L'istanza
activecarica un assembly satellite per la cultura richiesta nel seguente ordine di priorità:Controllare la cache.
Se
activeè l'istanza AssemblyLoadContext.Default, eseguire la logica di ricerca dell'assembly satellite (risorsa) predefinita.Chiamare la funzione AssemblyLoadContext.Load.
Se l'assembly gestito corrispondente all'assembly satellite è stato caricato da un file, controllare la directory dell'assembly gestito per trovare una sottodirectory corrispondente all'assembly richiesto CultureInfo.Name, ad esempio
es-MX.Nota
Sui sistemi Linux e macOS, la sottodirectory fa distinzione tra maiuscole e minuscole e deve:
- Corrispondenza esatta delle maiuscole e minuscole.
- Essere in lettere minuscole.
Generare l'evento AssemblyLoadContext.Resolving.
Generare l'evento AppDomain.AssemblyResolve.
Se un assembly satellite viene caricato:
- Viene generato l'evento AppDomain.AssemblyLoad.
- Nell'assembly si cerca la risorsa richiesta. Se il runtime trova la risorsa nell'assembly la usa direttamente. Se non trova la risorsa, la ricerca continua.
Nota
Per trovare una risorsa all'interno dell'assembly satellite, il runtime cerca il file di risorse richiesto da ResourceManager per il contesto corrente CultureInfo.Name. All'interno del file di risorse, cerca il nome della risorsa richiesta. Se uno dei due non viene trovato, la risorsa viene considerata come non trovata.
Il ResourceManager successivamente cerca gli assembly di impostazioni cultura padre su molti livelli potenziali, ripetendo ogni volta i passaggi 2 e 3.
Ogni cultura ha solo un genitore, che è definito dalla proprietà CultureInfo.Parent.
La ricerca delle culture padre si arresta quando la proprietà di una cultura è CultureInfo.InvariantCulture.
Per InvariantCulture, non torniamo ai passaggi 2 e 3, ma continuiamo con il passaggio 5.
Se la risorsa non viene ancora trovata, ResourceManager usa la risorsa per la cultura predefinita (fallback).
In genere le risorse delle impostazioni cultura predefinite sono incluse nell'assembly principale dell'applicazione. Tuttavia, è possibile specificare UltimateResourceFallbackLocation.Satellite per la proprietà NeutralResourcesLanguageAttribute.Location. Questo valore indica che la posizione di fallback finale per le risorse è un assembly satellitare anziché l'assembly principale.
Nota
La cultura predefinita è l'ultimo ripiego. È quindi consigliabile includere sempre un set completo di risorse nel file di risorse predefinito. Ciò aiuta a evitare che le eccezioni vengano sollevate. Includendo un set completo, si offre una soluzione di riserva per tutte le risorse e si garantisce che l'utente disponga di almeno una risorsa, anche se questa non è culturalmente specifica.
Infine,
- Se il runtime non trova un file di risorse per una cultura predefinita (fallback), viene generata un'eccezione MissingManifestResourceException o MissingSatelliteAssemblyException.
- Se il file di risorse viene trovato ma la risorsa richiesta non è presente, la richiesta restituisce
null.