Compartilhar via


Gerenciar recursos com o MRT Core

O MRT Core é uma versão simplificada do moderno Sistema de Gerenciamento de Recursos do Windows que é distribuído como parte do SDK do Aplicativo Windows.

O MRT Core tem recursos de tempo de compilação e tempo de execução. No momento da compilação, o sistema cria um índice de todas as diferentes variantes dos recursos que são empacotados com seu aplicativo. Esse índice é o Índice de Recursos do Pacote, ou PRI, e também está incluído no pacote do seu aplicativo.

Pré-requisitos

Para usar APIs do MRT Core no SDK do Aplicativo Windows:

  1. Baixe e instale a versão experimental mais recente do SDK de Aplicativo Windows. Para obter mais informações, consulte Introdução ao WinUI.
  2. Siga as instruções para Criar seu primeiro projeto da WinUI 3 ou Usar o SDK do Aplicativo Windows em um projeto existente.

Para saber mais sobre a disponibilidade do MRT Core no SDK do Aplicativo Windows, consulte canais de lançamento.

Arquivo PRI (Índice de Recursos de Pacote)

Cada pacote de aplicativo deve conter um índice binário dos recursos no aplicativo. Esse índice é criado no momento da compilação e está contido em um ou mais arquivos PRI. Cada arquivo PRI contém uma coleção nomeada de recursos, chamada de mapa de recursos.

Um arquivo PRI contém recursos de cadeia de caracteres reais. Os recursos binários e de caminho de arquivo inseridos são indexados diretamente dos arquivos de projeto. Um pacote normalmente contém um único arquivo PRI por idioma, chamado resources.pri. O arquivo resources.pri na raiz de cada pacote é carregado automaticamente quando o objeto ResourceManager é instanciado.

Os arquivos PRI contêm apenas dados, portanto, eles não usam o formato PE (executável portátil). Eles são projetados especificamente para serem apenas dados.

Observação

Para aplicativos .NET, no SDK do Aplicativo Windows versão 0.8 em diante, a propriedade do arquivo de Ação de Build para arquivos de recurso no Visual Studio é definida automaticamente, reduzindo a necessidade de configuração manual do projeto. A versão 1.0 introduziu o problema 1674. Isso foi corrigido na versão 1.1 (do canal estável), mas a correção requer o SDK do .NET 6.0.300 ou posterior. Se você estiver usando uma versão inferior do SDK do .NET, continue a usar a solução alternativa nas notas de versão 1.0.

Acessar recursos do aplicativo com o MRT Core

O MRT Core fornece várias maneiras diferentes de acessar os recursos do aplicativo.

Observação

No SDK do Aplicativo Windows 1.0 Versão Prévia 1 e versões posteriores, as APIs do MRT Core estão no namespace Microsoft.Windows.ApplicationModel.Resources . Em versões anteriores, eles estão no namespace Microsoft.ApplicationModel.Resources .

Funcionalidade básica com ResourceLoader

A maneira mais simples de acessar os recursos do aplicativo programaticamente é usando a classe ResourceLoader . ResourceLoader fornece acesso básico a recursos de cadeia de caracteres do conjunto de arquivos de recursos, bibliotecas referenciadas ou outros pacotes.

Funcionalidade avançada com ResourceManager

A classe ResourceManager fornece informações adicionais sobre recursos, como enumeração e inspeção. Isso vai além do que a classe ResourceLoader fornece.

Um objeto ResourceCandidate representa um único valor de recurso concreto e seus qualificadores, como a cadeia de caracteres "Hello World" para inglês ou "logo.scale-100.jpg" como um recurso de imagem qualificado específico para a resolução de escala 100.

Os recursos disponíveis para um aplicativo são armazenados em coleções hierárquicas, que você pode acessar com um objeto ResourceMap . A classe ResourceManager fornece acesso às várias instâncias de ResourceMap de nível superior usadas pelo aplicativo, que correspondem aos vários pacotes do aplicativo. O valor ResourceManager.MainResourceMap corresponde ao mapa de recursos do pacote de aplicativos atual e exclui todos os pacotes de estrutura referenciados. Cada ResourceMap é nomeado para o nome do pacote especificado no manifesto do pacote. Dentro de um ResourceMap há subárvores (consulte ResourceMap.GetSubtree). As subárvores normalmente correspondem aos arquivos de recurso que contêm o recurso.

O ResourceManager não apenas dá suporte ao acesso aos recursos de cadeia de caracteres de um aplicativo, mas também mantém a capacidade de enumerar e inspecionar os vários recursos de arquivo. Para evitar colisões entre arquivos e outros recursos originados de dentro de um arquivo, todos os caminhos de arquivo indexados residem em uma subárvore ResourceMap "Arquivos" reservada. Por exemplo, o arquivo '\Images\logo.png' corresponde ao nome do recurso 'Files/images/logo.png'.

Qualificar a seleção de recursos com ResourceContext

Os candidatos a recursos são escolhidos com base em um ResourceContext específico, que é uma coleção de valores de qualificador de recursos (idioma, escala, contraste e assim por diante). Um contexto padrão usa a configuração atual do aplicativo para cada valor de qualificador, a menos que seja substituído. Por exemplo, recursos como imagens podem ser qualificados para escala, que varia de um monitor para outro e, portanto, de uma exibição de aplicativo para outra. Por esse motivo, cada exibição de aplicativo tem um contexto padrão distinto. Sempre que você recuperar um candidato a recurso, deverá passar uma instância ResourceContext para obter o valor mais apropriado para uma determinada exibição.

Amostra

Para obter um exemplo que demonstra como usar a API do MRT Core, consulte o exemplo do MRT Core.

Confira também