Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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?
As assemblies satélites são carregadas quando se carrega 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:
Determine a
activeAssemblyLoadContext instância. Em todos os casos, aactiveinstância é a do assembly que está a ser executado. AssemblyLoadContextA
activeinstância carrega uma assembly satélite para a cultura solicitada na seguinte ordem de prioridade:Verifique seu cache.
Se
activeé a instância AssemblyLoadContext.Default, execute a lógica de sondagem de assembly satélite (recurso) padrão.Chame a função AssemblyLoadContext.Load.
Se o assembly gerenciado correspondente ao assembly satélite foi carregado de um arquivo, verifique no diretório do assembly gerenciado se há um subdiretório que corresponda ao solicitado CultureInfo.Name (por exemplo,
es-MX).Nota
No Linux e no macOS, o subdiretório distingue entre maiúsculas e minúsculas e deve seguir uma das seguintes opções:
- Exatamente corresponder ao caso.
- Use minúsculas.
Levante o AssemblyLoadContext.Resolving evento.
Acione o evento AppDomain.AssemblyResolve
Se um conjunto satélite estiver carregado:
- O AppDomain.AssemblyLoad evento está levantado.
- A assemblagem é pesquisada em busca do 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.
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 é definida pela propriedade CultureInfo.Parent.
A busca por culturas parentais pára quando a propriedade Parent de uma cultura é CultureInfo.InvariantCulture.
Para o InvariantCulture, não retornamos às etapas 2 e 3, mas continuamos com a etapa 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 é a última alternativa. 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.
Por fim,
- Se o tempo de execução não encontrar um arquivo de recurso para uma cultura de fallback padrão, uma exceção MissingManifestResourceException ou MissingSatelliteAssemblyException será lançada.
- Se o arquivo de recurso for encontrado, mas o recurso solicitado não estiver presente, a solicitação retornará
null.