Share via


Algoritmo de carga de ensamblado satélite

Los ensamblados satélite se utilizan con el fin de almacenar los recursos localizados personalizados para el idioma y la referencia cultural.

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 AssemblyLoadContext de active. 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 referencia cultural solicitada en el orden de prioridad siguiente:

  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. Luego, el ResourceManager busca los ensamblados de referencias culturales primarias a través de muchos niveles potenciales, y cada vez repite los pasos 2 y 3.

    Cada referencia cultural tiene solo un elemento primario, 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 usa el recurso para la referencia cultural predeterminada (reserva).

    Normalmente, los recursos de la referencia cultural predeterminada se incluyen en el ensamblado de la aplicación principal. 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 referencia cultural predeterminada es la reserva final. 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 reserva para todos los recursos y se garantiza que al menos un recurso esté siempre presente para el usuario, incluso si no es específico de la referencia cultural.

  6. Por último,

    • si el tiempo de ejecución no encuentra un archivo de recursos para una referencia cultural predeterminada (de reserva), se produce una excepción MissingManifestResourceException o MissingSatelliteAssemblyException.
    • Si se encuentra el archivo de recursos pero el recurso solicitado no se encuentra, la solicitud devuelve null.