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 variantes dos recursos que são empacotados com o app. Trata-se do índice de recurso do pacote, conhecido também como PRI, que também está incluído no pacote do app.

Pré-requisitos

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

  1. Baixe e instale a versão mais recente do SDK do Aplicativo Windows. Para obter mais informações, confira Instalar ferramentas para o SDK do Aplicativo Windows.
  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, confira Canais de lançamento.

Arquivo PRI (Índice de Recurso do Pacote)

Cada pacote de aplicativo deve conter um índice binário dos recursos no app. 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, conhecida como 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 somente dados, portanto, não use o formato de arquivo PE. Eles foram projetados especificamente para serem somente dados.

Observação

Para aplicativos .NET, no SDK do Aplicativo Windows versão 0.8 e em diante, a propriedade de 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 sobre a 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 versão prévia 1.0 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 aos recursos de cadeia de caracteres a partir do conjunto de arquivos de recurso, 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 oferecer.

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

Os recursos disponíveis para um app 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 app, que correspondem aos vários pacotes do app. O valor ResourceManager.MainResourceMap corresponde ao mapa de recursos do pacote do aplicativo atual e exclui todos os pacotes de estrutura referenciados. Cada ResourceMap é nomeado de acordo com o nome do pacote especificado no manifesto do pacote. Em um ResourceMap , há subárvores (consulte ResourceMap.GetSubtree). As subárvores normalmente correspondem aos arquivos de recurso que contêm o recurso.

Além de dar suporte ao acesso a recursos de cadeia de caracteres de um app, o ResourceManager também mantém a capacidade de enumerar e inspecionar os diversos recursos de arquivo. Para evitar colisões entre arquivos e outros recursos originados em um arquivo, os caminhos de arquivo indexados residem em uma subárvore "Files" reservada do ResourceMap. 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 recurso (idioma, escala, contraste etc.). 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, o que varia de um monitor para o 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ê recupera um candidato a recurso, deve 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