Partilhar via


Algoritmo de carregamento de montagem por satélite

Os assemblies de satélite são usados para armazenar recursos localizados personalizados para idioma e cultura.

Os assemblies satélite usam um algoritmo de carregamento diferente dos assemblies gerenciados em geral.

Quando são carregados os conjuntos satélites?

Os assemblies de satélite são carregados ao carregar um recurso localizado.

A API básica para carregar recursos localizados é a System.Resources.ResourceManager classe. Em última análise, a ResourceManager classe chamará o GetSatelliteAssembly método para cada CultureInfo.Name.

APIs de nível superior podem abstrair a API de baixo nível.

Algoritmo

O processo de fallback de recursos do .NET Core envolve as seguintes etapas:

  1. Determine a active AssemblyLoadContext instância. Em todos os casos, a active instância é a do assembly executor.AssemblyLoadContext

  2. A active instância carrega um assembly satélite para a cultura solicitada na seguinte ordem de prioridade:

  3. Se um conjunto satélite estiver carregado:

    • O AppDomain.AssemblyLoad evento está levantado.
    • O assembly é pesquisado para o recurso solicitado. Se o tempo de execução encontrar o recurso no assembly, ele o usará. Se não encontrar o recurso, continua a pesquisa.

    Nota

    Para encontrar um recurso dentro do assembly satélite, o tempo de execução procura o arquivo de recurso solicitado pelo ResourceManager para o atual CultureInfo.Name. Dentro do arquivo de recurso, ele procura o nome do recurso solicitado. Se um deles não for encontrado, o recurso será tratado como não encontrado.

  4. O ResourceManager próximo pesquisa os assemblies de cultura pai através de muitos níveis potenciais, cada vez repetindo as etapas 2 & 3.

    Cada cultura tem apenas um pai, que é definido pela CultureInfo.Parent propriedade.

    A busca por culturas parentais para quando a propriedade de Parent uma cultura é CultureInfo.InvariantCulture.

    Para o , não retornamos às etapas 2 & 3, mas continuamos com a InvariantCultureetapa 5.

  5. Se o recurso ainda não for encontrado, o ResourceManager usará o recurso para a cultura padrão (fallback).

    Normalmente, os recursos para a cultura padrão são incluídos no assembly do aplicativo principal. No entanto, você pode especificar UltimateResourceFallbackLocation.Satellite para a NeutralResourcesLanguageAttribute.Location propriedade. Esse valor indica que o local de fallback final para recursos é um assembly satélite em vez do assembly principal.

    Nota

    A cultura padrão é o fallback final. Portanto, recomendamos que você sempre inclua um conjunto exaustivo de recursos no arquivo de recurso padrão. Isso ajuda a evitar que exceções sejam lançadas. Ao ter um conjunto exaustivo, você fornece um fallback para todos os recursos e garante que pelo menos um recurso esteja sempre presente para o usuário, mesmo que não seja culturalmente específico.

  6. Por fim,