Поделиться через


Создание ресурсов в пакете приложения вместо пакета ресурсов

Некоторые виды приложений (многоязычные словари, средства перевода и т. д.) необходимо переопределить поведение пакета приложений по умолчанию и создать ресурсы в пакете приложений вместо того, чтобы использовать их в отдельных пакетах ресурсов (или пакетах ресурсов). В этом разделе объясняется, как это сделать.

По умолчанию при создании пакета приложений (.appxbundle) в пакет приложения встроены только ресурсы по умолчанию для языка, масштабирования и DirectX. Преобразованные ресурсы ( и ресурсы, адаптированные для масштабирования, не используемого по умолчанию, и (или) уровни функций DirectX, встроены в пакеты ресурсов, и они загружаются только на устройства, которым они нужны. Если клиент покупает ваше приложение из Microsoft Store с помощью устройства с языковым предпочтениям, заданным для испанского языка, то скачиваются и устанавливаются только ваше приложение, а также испанский пакет ресурсов. Если тот же пользователь позже изменяет предпочтения языка на французский язык в параметрах, то французский пакет ресурсов вашего приложения загружается и устанавливается. Аналогичные вещи происходят с ресурсами, квалифицированными для масштабирования и уровня компонентов DirectX. Для большинства приложений это поведение представляет собой ценную эффективность, и это то, что вы и клиент хотят произойти.

Но если приложение позволяет пользователю изменять язык на лету из приложения (а не с помощью параметров), то поведение по умолчанию не подходит. Вы действительно хотите, чтобы все языковые ресурсы были безусловно загружены и установлены вместе с приложением один раз, а затем остаются на устройстве. Вы хотите создать все эти ресурсы в пакет приложения, а не в отдельные пакеты ресурсов.

Примечание. Включение ресурсов в пакет приложения существенно увеличивает размер приложения. Вот почему стоит делать только в том случае, если природа приложения требует его. Если нет, то вам не нужно ничего делать, кроме сборки обычного пакета приложений как обычно.

Visual Studio можно настроить для сборки ресурсов в пакет приложения одним из двух способов. Вы можете добавить файл конфигурации в проект или изменить файл проекта напрямую. Используйте любой из этих вариантов, которые лучше всего подходят для вашей системы сборки.

Вариант 1. Использование priconfig.packaging.xml для создания ресурсов в пакете приложения

  1. В Visual Studio добавьте новый элемент в проект. Выберите XML-файл и назовите файл priconfig.packaging.xml.
  2. В Обозреватель решений выберите priconfig.packaging.xml и проверьте окно свойств. Действие сборки файла должно иметь значение None, а для копирования в выходной каталог должно быть задано значение "Не копировать".
  3. Замените содержимое файла этим XML-кодом.
    <packaging>
       <autoResourcePackage qualifier="Language" />
       <autoResourcePackage qualifier="Scale" />
       <autoResourcePackage qualifier="DXFeatureLevel" />
    </packaging>
    
  4. Каждый <autoResourcePackage> элемент сообщает Visual Studio автоматически разделить ресурсы для заданного имени квалификатора на отдельные пакеты ресурсов. Это называется автоматическое разделение. С содержимым файла, который вы уже сделали, вы на самом деле не изменили поведение Visual Studio. Другими словами, Visual Studio уже ведет себя так, как если бы этот файл присутствовал с этим содержимым, так как это значения по умолчанию. Если вы не хотите, чтобы Visual Studio автоматически разделяла имя квалификатора, удалите этот <autoResourcePackage> элемент из файла. Вот как будет выглядеть файл, если вы хотите, чтобы все языковые ресурсы были встроены в пакет приложения вместо автоматического разделения на отдельные пакеты ресурсов.
    <packaging>
       <autoResourcePackage qualifier="Scale" />
       <autoResourcePackage qualifier="DXFeatureLevel" />
    </packaging>
    
  5. Сохраните и закройте файл и перестроите проект.

Чтобы убедиться, что выбранные варианты автоматического разделения учитываются, найдите файл <ProjectFolder>\obj\<ReleaseConfiguration folder>\split.priconfig.xml и убедитесь, что его содержимое соответствует вашему выбору. В противном случае вы успешно настроили Visual Studio ресурсы, выбранные в пакете приложения.

Существует один последний шаг, который вам нужно сделать. Но только если вы удалили Language имя квалификатора. Необходимо указать объединение всех поддерживаемых языков приложения в качестве языка по умолчанию приложения. Дополнительные сведения см. в разделе "Указание ресурсов по умолчанию", используемых приложением. Это то, что priconfig.default.xml вы будете содержать, если бы вы содержали ресурсы для английского, испанского и французского языков в пакете приложения.

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

Как это работает?

За кулисами Visual Studio запускает средство с именем MakePri.exe для создания файла, известного как индекс ресурсов пакета, который описывает все ресурсы приложения, включая указание имен квалификатора ресурсов для автоматического разделения. Дополнительные сведения об этом средстве см. в разделе "Компиляция ресурсов" вручную с помощью MakePri.exe. Visual Studio передает файл MakePri.exeконфигурации в . Содержимое priconfig.packaging.xml файла используется в качестве <packaging> элемента этого файла конфигурации, который является частью, которая определяет автоматическое разделение. Таким образом, добавление и редактирование priconfig.packaging.xml в конечном итоге влияет на содержимое файла индекса ресурсов пакета, который Visual Studio создает для приложения, а также содержимое пакетов в пакете приложений.

Использование другого имени файла, отличного от имени priconfig.packaging.xml

Если вы назовете файл priconfig.packaging.xml, Visual Studio распознает его и будет автоматически использовать его. Если вы присвойте ему другое имя, вам потребуется сообщить Visual Studio. В файле проекта между открывающим и закрывающим тегами первого <PropertyGroup> элемента добавьте этот XML-файл.

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

Замените FILE-PATH-AND-NAME путь к файлу и его имя.

Вариант 2. Использование файла проекта для создания ресурсов в пакете приложения

Это альтернатива варианту 1. Когда вы узнаете, как работает вариант 1, можно выбрать вариант 2 вместо этого, если это подходит для разработки и /или создания рабочего процесса лучше.

В файле проекта между открывающим и закрывающим тегами первого <PropertyGroup> элемента добавьте этот XML-файл.

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

Вот как это выглядит после удаления первого квалификатора.

<AppxBundleAutoResourcePackageQualifiers>Scale|DXFeatureLevel</AppxBundleAutoResourcePackageQualifiers>

Сохраните и закройте и перестроите проект.

Существует один последний шаг, который вам нужно сделать. Но только если вы удалили Language имя квалификатора. Необходимо указать объединение всех поддерживаемых языков приложения в качестве языка по умолчанию приложения. Дополнительные сведения см. в разделе "Указание ресурсов по умолчанию", используемых приложением. Это то, что будет содержать файл проекта, если вы включили ресурсы для английского, испанского и французского языков в пакет приложения.

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