Crie recursos no pacote do aplicativo em vez de em um pacote de recursos

Alguns tipos de aplicativos (dicionários multilíngues, ferramentas de tradução etc.) precisam substituir o comportamento padrão de um pacote de aplicativos e criar recursos no pacote do aplicativo em vez de tê-los em pacotes de recursos separados (ou pacotes de recursos). Este tópico explica como fazer isso.

Por padrão, quando você cria um pacote de aplicativos (.appxbundle), somente os recursos padrão para idioma, escala e nível de recursos do DirectX são integrados ao pacote do aplicativo. Seus recursos traduzidos, e seus recursos personalizados para escalas não padrão e/ou níveis de recursos do DirectX, são incorporados a pacotes de recursos e são baixados apenas em dispositivos que precisam deles. Se um cliente estiver comprando seu aplicativo na Microsoft Store usando um dispositivo com uma preferência de idioma definida como espanhol, somente seu aplicativo e o pacote de recursos em espanhol serão baixados e instalados. Se esse mesmo usuário alterar posteriormente sua preferência de idioma para francês em Configurações, o pacote de recursos em francês do aplicativo será baixado e instalado. Coisas semelhantes acontecem com seus recursos qualificados para escala e para o nível de recursos do DirectX. Para a maioria dos aplicativos, esse comportamento constitui uma eficiência valiosa e é o que você e o cliente desejam que aconteça.

Mas se o seu aplicativo permitir que o usuário altere o idioma em tempo real de dentro do aplicativo (em vez de por meio de Configurações), esse comportamento padrão não será apropriado. Na verdade, você deseja que todos os seus recursos de idioma sejam baixados e instalados incondicionalmente junto com o aplicativo uma vez e, em seguida, permaneçam no dispositivo. Você deseja criar todos esses recursos em seu pacote de aplicativos em vez de em pacotes de recursos separados.

Observação A inclusão de recursos em um pacote de aplicativo aumenta essencialmente o tamanho do aplicativo. É por isso que só vale a pena fazer se a natureza do aplicativo exigir. Caso contrário, você não precisa fazer nada, exceto criar um pacote de aplicativos regular como de costume.

Você pode configurar o Visual Studio para criar recursos em seu pacote de aplicativos de duas maneiras. Você pode adicionar um arquivo de configuração ao seu projeto ou editá-lo diretamente. Use qualquer uma dessas opções com a qual você se sinta mais confortável ou a que funcionar melhor com seu sistema de compilação.

Opção 1. Usar priconfig.packaging.xml para criar recursos no pacote do aplicativo

  1. No Visual Studio, adicione um novo item ao projeto. Escolha Arquivo XML e nomeie o arquivo como priconfig.packaging.xml.
  2. No Gerenciador de Soluções, selecione priconfig.packaging.xml e verifique a janela Propriedades. A Ação de Build do arquivo deve ser definida como Nenhuma, enquanto Copy to Output Directory definida como Do not copy.
  3. Substitua o conteúdo do arquivo por este XML.
    <packaging>
       <autoResourcePackage qualifier="Language" />
       <autoResourcePackage qualifier="Scale" />
       <autoResourcePackage qualifier="DXFeatureLevel" />
    </packaging>
    
  4. Cada <autoResourcePackage> elemento informa ao Visual Studio para dividir automaticamente os recursos para o nome do qualificador fornecido em pacotes de recursos separados. Isso é chamado de divisão automática. Com o conteúdo de arquivo que você tem até agora, o comportamento do Visual Studio não foi alterado. Em outras palavras, o Visual Studio já se comportou como se esse arquivo estivesse presente com esses conteúdos, pois esses são os padrões. Se você não quiser que o Visual Studio se divida automaticamente em um nome de qualificador, exclua esse <autoResourcePackage> elemento do arquivo. Veja como o arquivo ficaria se você quisesse que todos os recursos de idioma fossem incorporados ao pacote do aplicativo em vez de serem divididos automaticamente em pacotes de recursos separados.
    <packaging>
       <autoResourcePackage qualifier="Scale" />
       <autoResourcePackage qualifier="DXFeatureLevel" />
    </packaging>
    
  5. Salve e feche o arquivo, e recompile o projeto.

Para confirmar se suas opções de divisão automática estão sendo levadas em consideração, procure o arquivo <ProjectFolder>\obj\<ReleaseConfiguration folder>\split.priconfig.xml e confirme se seu conteúdo corresponde às suas escolhas. Se isso acontecer, você configurou com êxito o Visual Studio para criar os recursos de sua escolha no pacote do aplicativo.

Há uma etapa final que você precisa fazer. Mas somente se você excluiu o nome do Language qualificador. Você precisa especificar a união de todos os idiomas compatíveis do seu aplicativo como o idioma padrão do seu aplicativo. Veja mais detalhes em Especificar os recursos padrão que o app usa. Isso é o que você priconfig.default.xml conteria se estivesse incluindo recursos para inglês, espanhol e francês no pacote do aplicativo.

   <default>
      <qualifier name="Language" value="en;es;fr" />
      ...
   </default>

Como isso funciona?

Nos bastidores, o Visual Studio inicia uma ferramenta chamada MakePri.exe para gerar um arquivo conhecido como Índice de Recursos de Pacote, que descreve todos os recursos do aplicativo, incluindo a indicação de quais nomes de qualificador de recurso devem ser divididos automaticamente. Para obter detalhes sobre essa ferramenta, consulte Compilar recursos manualmente com o MakePri.exe. O Visual Studio passa um arquivo de configuração para o MakePri.exe. O conteúdo do arquivo priconfig.packaging.xml é usado como o <packaging> elemento desse arquivo de configuração, que é a parte que determina a divisão automática. Portanto, adicionar e editar priconfig.packaging.xml influencia o conteúdo do arquivo de Índice de Recursos de Pacote que o Visual Studio gera para seu aplicativo, bem como o conteúdo dos pacotes em seu pacote de aplicativos.

Usando um nome de arquivo diferente de priconfig.packaging.xml

Se você nomear o arquivo priconfig.packaging.xml, o Visual Studio o reconhecerá e o usará automaticamente. Se você atribuir outro nome a ele, será necessário informar o Visual Studio. No arquivo de projeto, entre as marcas de abertura e fechamento do primeiro elemento <PropertyGroup>, adicione esse XML.

<AppxPriConfigXmlPackagingSnippetPath>FILE-PATH-AND-NAME</AppxPriConfigXmlPackagingSnippetPath>

Substitua FILE-PATH-AND-NAME pelo caminho e pelo nome do arquivo.

Opção 2. Usar o arquivo de projeto para criar recursos no pacote do aplicativo

Esta é uma alternativa para a Opção 1. Depois de entender como a Opção 1 funciona, você pode optar por fazer a Opção 2 se isso se adequar melhor ao seu fluxo de trabalho de desenvolvimento e/ou compilação.

No arquivo de projeto, entre as marcas de abertura e fechamento do primeiro elemento <PropertyGroup>, adicione esse XML.

<AppxBundleAutoResourcePackageQualifiers>Language|Scale|DXFeatureLevel</AppxBundleAutoResourcePackageQualifiers>

Veja como isso fica depois que você exclui o nome do primeiro qualificador.

<AppxBundleAutoResourcePackageQualifiers>Scale|DXFeatureLevel</AppxBundleAutoResourcePackageQualifiers>

Salve e feche o arquivo, e recompile o projeto.

Há uma etapa final que você precisa fazer. Mas somente se você excluiu o nome do Language qualificador. Você precisa especificar a união de todos os idiomas compatíveis do seu aplicativo como o idioma padrão do seu aplicativo. Veja mais detalhes em Especificar os recursos padrão que o app usa. Isso é o que seu arquivo de projeto conteria se você incluísse recursos para inglês, espanhol e francês no pacote do aplicativo.

<AppxDefaultResourceQualifiers>Language=en;es;fr</AppxDefaultResourceQualifiers>