Crie recursos no pacote do aplicativo, não em um pacote de recursosBuild resources into your app package, instead of into a resource pack

Alguns tipos de apps (dicionários multilíngues, ferramentas de tradução etc.) precisam substituir o comportamento padrão de um lote de aplicativo e compilar recursos no pacote de aplicativos, em vez de tê-los em pacotes de recursos separados.Some kinds of apps (multilingual dictionaries, translation tools, etc.) need to override the default behavior of an app bundle, and build resources into the app package instead of having them in separate resource packages (or resource packs). Este tópico explica como fazer isso.This topic explains how to do that.

Por padrão, quando você compila um lote de aplicativo (.appxbundle), somente os recursos padrão de idioma, escala e nível de recurso DirectX estão integrados ao pacote de aplicativos.By default when you build an app bundle (.appxbundle), only your default resources for language, scale, and DirectX feature level are built into the app package. Os recursos traduzidos, e seus recursos personalizados para escalas não padrão e/ou níveis de recurso DirectX, são integrados aos pacotes de recursos e são apenas baixados para dispositivos que precisam deles.Your translated resources—and your resources tailored for non-default scales and/or DirectX feature levels—are built into resource packages and they are only downloaded onto devices that need them. Se um cliente estiver comprando o app na Microsoft Store usando um dispositivo com uma preferência de idioma definida como Espanhol, somente seu app e o pacote de recursos em espanhol serão baixados e instalados.If a customer is buying your app from the Microsoft Store using a device with a language preference set to Spanish, then only your app plus the Spanish resource package are downloaded and installed. Se o mesmo usuário alterar posteriormente sua preferência de idioma para Francês em Configurações , o pacote de recursos em francês do app será baixado e instalado.If that same user later changes their language preference to French in Settings , then your app's French resource package is downloaded and installed. O mesmo se aplicará aos recursos qualificados para escala e nível de recurso DirectX.Similar things happen with your resources qualified for scale and for DirectX feature level. Na maioria dos apps, esse comportamento constitui uma eficiência valiosa e é exatamente o que você e o cliente querem que aconteça.For the majority of apps, this behavior constitutes a valuable efficiency, and it's exactly what you and the customer want to happen.

Mas, se o app permitir que o usuário altere o idioma em tempo real no app (e não por meio de Configurações ), esse comportamento padrão não será adequado.But if your app allows the user to change the language on the fly from within the app (instead of via Settings ), then that default behavior is not appropriate. Na verdade, você quer que todos os recursos de idioma sejam baixados e instalados incondicionalmente junto com o app uma vez e, depois, permaneçam no dispositivo.You actually want all of your language resources to be unconditionally downloaded and installed along with the app one time, and then remain on the device. Você deseja compilar todos esses recursos no pacote de aplicativos, e não em pacotes de recursos separados.You want to build all of those resources into your app package instead of into separate resource packages.

Observação A inclusão de recursos em um pacote de aplicativos basicamente aumenta o tamanho do app.Note Including resources in an app package essentially increases the size of the app. É por isso que só vale a pena fazer isso se a natureza do app assim o exigir.That's why it's only worth doing if the nature of the app demands it. Caso contrário, você não precisará fazer nada, a não ser compilar um lote de aplicativo regular como de costume.If not, then you don't need to do anything except build a regular app bundle as usual.

Você pode configurar o Visual Studio para compilar recursos no pacote de aplicativos de duas maneiras.You can configure Visual Studio to build resources into your app package in one of two ways. Você pode adicionar um arquivo de configuração ao projeto ou editar o arquivo de projeto diretamente.You can either add a configuration file to your project, or you can edit your project file directly. Use a alternativa com a qual se sentir mais confortável ou a que funcionar melhor no seu sistema de compilação.Use whichever of these options you're most comfortable with, or whichever works best with your build system.

Opção 1.Option 1. Use priconfig.packaging.xml para compilar recursos no pacote de aplicativosUse priconfig.packaging.xml to build resources into your app package

  1. No Visual Studio, adicione um novo item ao projeto.In Visual Studio, add a new item to your project. Escolha Arquivo XML e nomeie o arquivo como priconfig.packaging.xml.Choose XML File, and name the file priconfig.packaging.xml.
  2. No Gerenciador de Soluções, selecione priconfig.packaging.xml e verifique a janela Propriedades.In Solution Explorer, select priconfig.packaging.xml and check the Properties window. A Ação de Build do arquivo deve ser definida como Nenhuma, enquanto Copy to Output Directory definida como Do not copy.The file's Build Action should be set to None, and Copy to Output Directory should be set to Do not copy.
  3. Substitua o conteúdo do arquivo por este XML.Replace the contents of the file with this XML.
    <packaging>
       <autoResourcePackage qualifier="Language" />
       <autoResourcePackage qualifier="Scale" />
       <autoResourcePackage qualifier="DXFeatureLevel" />
    </packaging>
    
  4. Cada elemento <autoResourcePackage> instrui o Visual Studio a dividir automaticamente os recursos do nome de qualificador fornecido em pacotes de recursos separados.Each <autoResourcePackage> element tells Visual Studio to automatically split the resources for the given qualifier name out into separate resource packages. Isso é denominado separação automática .This is called auto-splitting . Com o conteúdo de arquivo que você tem até agora, o comportamento do Visual Studio não foi alterado.With the file contents you have so far, you haven't actually changed Visual Studio's behavior. Em outras palavras, o Visual Studio já estava se comportando como se esse arquivo estivesse presente com esse conteúdo, pois isso é o padrão.In other words, Visual Studio already behaved as if this file were present with these contents, because these are the defaults. Se você não quiser que o Visual Studio seja dividido automaticamente em um nome de qualificador, exclua o elemento <autoResourcePackage> do arquivo.If you don't want Visual Studio to auto-split on a qualifier name then delete that <autoResourcePackage> element from the file. O arquivo terá esta aparência se você quiser que todos os recursos de idioma sejam integrados ao pacote de aplicativos, em vez de serem divididos automaticamente em pacotes de recursos separados.Here's how the file would look if you wanted all of your language resources to be built into the app package instead of being auto-split out into separate resource packages.
    <packaging>
       <autoResourcePackage qualifier="Scale" />
       <autoResourcePackage qualifier="DXFeatureLevel" />
    </packaging>
    
  5. Salve e feche o arquivo, e recompile o projeto.Save and close the file and rebuild your project.

Para confirmar que 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 opções.To confirm that your auto-split choices are being taken into account, look for the file <ProjectFolder>\obj\<ReleaseConfiguration folder>\split.priconfig.xml and confirm that its contents match your choices. Em caso afirmativo, você configurou com êxito o Visual Studio para compilar os recursos de sua preferência no pacote de aplicativos.If they do, then you have successfully configured Visual Studio to build the resources of your choice into the app package.

Há uma etapa final que você precisa executar.There is one final step that you need to do. Mas somente se você tiver excluído o nome de qualificador Language .But only if you deleted the Language qualifier name . Você precisa especificar a união de todos os idiomas com suporte do app como o padrão de idioma do app.You need to specify the union of all of your app's supported language as your app's default for language. Para obter detalhes, consulte Especificar os recursos padrão usados pelo app.For details, see Specify the default resources that your app uses. É isso que o priconfig.default.xml conteria se você estivesse incluindo recursos para inglês, espanhol e francês no pacote de aplicativos.This is what your priconfig.default.xml would contain if you were including resources for English, Spanish, and French in your app package.

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

Como isso funciona?How does this work?

Em segundo plano, o Visual Studio inicia uma ferramenta chamada MakePri.exe para gerar um arquivo conhecido como índice de recurso do pacote, que descreve todos os recursos do app, incluindo a indicação de quais nomes de qualificador de recurso servirão como base para a divisão automática.Behind the scenes, Visual Studio launches a tool named MakePri.exe to generate a file known as a Package Resource Index, which describes all of your app's resources, including indicating which resource qualifier names to auto-split on. Para obter detalhes sobre essa ferramenta, consulte Compilar recursos manualmente com o MakePri.exe.For details about this tool, see Compile resources manually with MakePri.exe. O Visual Studio passa um arquivo de configuração para o MakePri.exe.Visual Studio passes a configuration file to MakePri.exe. O conteúdo do arquivo priconfig.packaging.xml é usado como elemento <packaging> desse arquivo de configuração, que é a parte que determina a divisão automática.The contents of your priconfig.packaging.xml file are used as the <packaging> element of that configuration file, which is the part that determines auto-splitting. Assim, a adição e a edição de priconfig.packaging.xml acaba influenciando o conteúdo do arquivo de índice de recurso do pacote que o Visual Studio gera para o app, bem como o conteúdo dos pacotes contidos no lote de aplicativo.So, adding and editing priconfig.packaging.xml ultimately influences the contents of the Package Resource Index file that Visual Studio generates for your app, as well as the contents of the packages in your app bundle.

Usando um nome de arquivo diferente de priconfig.packaging.xmlUsing a different file name than priconfig.packaging.xml

Se você nomear o arquivo priconfig.packaging.xml, o Visual Studio o reconhecerá e o usará automaticamente.If you name your file priconfig.packaging.xml, then Visual Studio will recognize it and use it automatically. Se você atribuir outro nome a ele, será necessário informar o Visual Studio.If you give it a different name, then you'll need to let Visual Studio know. No arquivo de projeto, entre as marcas de abertura e fechamento do primeiro elemento <PropertyGroup>, adicione esse XML.In your project file, between the opening and closing tags of the first <PropertyGroup> element, add this XML.

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

Substitua FILE-PATH-AND-NAME pelo caminho e nome do arquivo.Replace FILE-PATH-AND-NAME with the path to, and name of, your file.

Opção 2.Option 2. Usar o arquivo de projeto para compilar recursos no pacote de aplicativosUse your project file to build resources into your app package

Esta é uma alternativa para a Opção 1.This is an alternative to Option 1. Depois que você entender como funciona a Opção 1, poderá optar pela Opção 2, se ela for mais adequada ao seu fluxo de trabalho de desenvolvimento e/ou compilação.Once you understand how Option 1 works, you can choose to do Option 2 instead, if that suits your development and/or build workflow better.

No arquivo de projeto, entre as marcas de abertura e fechamento do primeiro elemento <PropertyGroup>, adicione esse XML.In your project file, between the opening and closing tags of the first <PropertyGroup> element, add this XML.

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

Esta será a aparência do arquivo depois que você excluir o primeiro nome de qualificador.Here's how that looks after you've delete the first qualifier name.

<AppxBundleAutoResourcePackageQualifiers>Scale|DXFeatureLevel</AppxBundleAutoResourcePackageQualifiers>

Salve e feche o arquivo, e recompile o projeto.Save and close, and rebuild your project.

Há uma etapa final que você precisa executar.There is one final step that you need to do. Mas somente se você tiver excluído o nome de qualificador Language .But only if you deleted the Language qualifier name . Você precisa especificar a união de todos os idiomas com suporte do app como o padrão de idioma do app.You need to specify the union of all of your app's supported language as your app's default for language. Para obter detalhes, consulte Especificar os recursos padrão usados pelo app.For details, see Specify the default resources that your app uses. É isso que o arquivo de projeto conteria se você estivesse incluindo recursos para inglês, espanhol e francês no pacote de aplicativos.This is what your project file would contain if you were including resources for English, Spanish, and French in your app package.

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