Algoritmo di caricamento dell'assembly satellite

Gli assembly satellite vengono usati per archiviare le risorse localizzate personalizzate per lingua e impostazioni cultura.

Gli assembly satellite usano un algoritmo di caricamento diverso rispetto agli assembly gestiti generali.

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:

  1. Determinare l'istanza activeAssemblyLoadContext. In tutti i casi, l'istanza active è il AssemblyLoadContext dell’assembly in esecuzione.

  2. L'istanza active carica un assembly satellite per le impostazioni cultura richieste nell'ordine di priorità seguente:

  3. Se viene caricato un assembly satellite:

    • Viene generato l'evento AppDomain.AssemblyLoad.
    • L'assembly viene cercato la risorsa richiesta. Se il runtime trova la risorsa nell'assembly la usa direttamente. In caso contrario la ricerca continua.

    Nota

    Per trovare una risorsa all'interno dell'assembly satellite, il runtime cerca il file di risorse richiesto da ResourceManager per la proprietà CultureInfo.Name corrente. 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.

  4. Il ResourceManager cerca quindi gli assembly di impostazioni cultura padre su molti livelli potenziali, ripetendo ogni ora i passaggi 2 e 3.

    Le impostazioni cultura hanno solo un elemento padre, che viene definito dalla proprietà CultureInfo.Parent.

    La ricerca di impostazioni cultura padre si arresta quando la proprietà Parent di un set di impostazioni cultura è CultureInfo.InvariantCulture.

    Per InvariantCulture, non torniamo ai passaggi 2 e 3, ma continuiamo con il passaggio 5.

  5. Se la risorsa ancora non viene trovata, ResourceManager usa la risorsa per le impostazioni cultura predefinite (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 finale di fallback per le risorse è un assembly satellite anziché l'assembly principale.

    Nota

    Le impostazioni cultura predefinite sono il fallback finale. È quindi consigliabile includere sempre un set completo di risorse nel file di risorse predefinito. Ciò evita la generazione di eccezioni. Se si include un set completo, si offre un fallback per tutte le risorse e si garantisce che l'utente disponga di almeno una risorsa, anche se questa non è specifica per le impostazioni cultura.

  6. Infine,