Compartir a través de


Algoritmo de carga de ensamblaje satélite

Los ensamblados satélite se utilizan para almacenar recursos localizados personalizados para el idioma y la cultura.

Los ensamblados satélite usan un algoritmo de carga distinto al de los ensamblados administrados generales.

¿Cuándo se cargan los ensamblados satélite?

Los ensamblados satélite se cargan al cargar un recurso localizado.

La API básica para cargar recursos localizados es la clase System.Resources.ResourceManager. En última instancia, la clase ResourceManager llamará al método GetSatelliteAssembly para cada CultureInfo.Name.

Las API de nivel alto pueden abstraer la API de nivel bajo.

Algoritmo

El proceso de reserva de recursos de .NET Core conlleva los pasos siguientes:

  1. Determine la instancia de activeAssemblyLoadContext. En todos los casos, la instancia de active es el elemento AssemblyLoadContext del ensamblado que se ejecuta.

  2. La instancia active carga un ensamblado satélite para la cultura solicitada en el siguiente orden de prioridad:

  3. Si se carga un ensamblado satélite:

    • Se genera el evento AppDomain.AssemblyLoad.
    • Se busca en el ensamblado el recurso solicitado. Si el runtime encuentra el recurso en el ensamblado, lo usará. Si no encuentra el recurso, seguirá con la búsqueda.

    Nota:

    Para buscar un recurso dentro del ensamblado satélite, el entorno de ejecución busca el archivo de recursos solicitado por ResourceManager para el CultureInfo.Name actual. En el archivo de recursos, busca el nombre del recurso solicitado. Si no se encuentra ninguno, se considera que no se encontró el recurso.

  4. A continuación, el ResourceManager busca los ensamblados de la cultura principal a través de muchos niveles potenciales, repitiendo cada vez los pasos 2 y 3.

    Cada cultura tiene solo un padre, que está definido mediante la propiedad CultureInfo.Parent.

    La búsqueda de las referencias culturales primarias se detiene cuando la propiedad Parent de una referencia cultural es CultureInfo.InvariantCulture.

    En el caso de InvariantCulture, no se vuelve a los pasos 2 y 3, sino que continúa con el paso 5.

  5. Si aún no se encuentra el recurso, el ResourceManager utiliza el recurso para la cultura predeterminada.

    Normalmente, los recursos de la cultura predeterminada se incluyen en el ensamblado principal de la aplicación. Sin embargo, se puede especificar UltimateResourceFallbackLocation.Satellite para la propiedad NeutralResourcesLanguageAttribute.Location. Este valor indica que la ubicación de reserva final para los recursos es un ensamblado satélite, en lugar del ensamblado principal.

    Nota:

    La cultura predeterminada es la última alternativa. Por lo tanto, se recomienda incluir siempre un conjunto de recursos exhaustivo en el archivo de recursos predeterminado. Esto ayuda a evitar que se produzcan excepciones. Al tener un conjunto exhaustivo, se proporciona una solución de respaldo para todos los recursos y se garantiza que al menos un recurso esté siempre presente para el usuario, incluso si no es específico desde una perspectiva cultural.

  6. Por último,