Создание ресурсов в пакете приложения вместо пакета ресурсов
Некоторые виды приложений (многоязычные словари, средства перевода и т. д.) необходимо переопределить поведение пакета приложений по умолчанию и создать ресурсы в пакете приложений вместо того, чтобы использовать их в отдельных пакетах ресурсов (или пакетах ресурсов). В этом разделе объясняется, как это сделать.
По умолчанию при создании пакета приложений (.appxbundle) в пакет приложения встроены только ресурсы по умолчанию для языка, масштабирования и DirectX. Преобразованные ресурсы ( и ресурсы, адаптированные для масштабирования, не используемого по умолчанию, и (или) уровни функций DirectX, встроены в пакеты ресурсов, и они загружаются только на устройства, которым они нужны. Если клиент покупает ваше приложение из Microsoft Store с помощью устройства с языковым предпочтениям, заданным для испанского языка, то скачиваются и устанавливаются только ваше приложение, а также испанский пакет ресурсов. Если тот же пользователь позже изменяет предпочтения языка на французский язык в параметрах, то французский пакет ресурсов вашего приложения загружается и устанавливается. Аналогичные вещи происходят с ресурсами, квалифицированными для масштабирования и уровня компонентов DirectX. Для большинства приложений это поведение представляет собой ценную эффективность, и это то, что вы и клиент хотят произойти.
Но если приложение позволяет пользователю изменять язык на лету из приложения (а не с помощью параметров), то поведение по умолчанию не подходит. Вы действительно хотите, чтобы все языковые ресурсы были безусловно загружены и установлены вместе с приложением один раз, а затем остаются на устройстве. Вы хотите создать все эти ресурсы в пакет приложения, а не в отдельные пакеты ресурсов.
Примечание. Включение ресурсов в пакет приложения существенно увеличивает размер приложения. Вот почему стоит делать только в том случае, если природа приложения требует его. Если нет, то вам не нужно ничего делать, кроме сборки обычного пакета приложений как обычно.
Visual Studio можно настроить для сборки ресурсов в пакет приложения одним из двух способов. Вы можете добавить файл конфигурации в проект или изменить файл проекта напрямую. Используйте любой из этих вариантов, которые лучше всего подходят для вашей системы сборки.
Вариант 1. Использование priconfig.packaging.xml для создания ресурсов в пакете приложения
- В Visual Studio добавьте новый элемент в проект. Выберите XML-файл и назовите файл
priconfig.packaging.xml
. - В Обозреватель решений выберите
priconfig.packaging.xml
и проверьте окно свойств. Действие сборки файла должно иметь значение None, а для копирования в выходной каталог должно быть задано значение "Не копировать". - Замените содержимое файла этим XML-кодом.
<packaging> <autoResourcePackage qualifier="Language" /> <autoResourcePackage qualifier="Scale" /> <autoResourcePackage qualifier="DXFeatureLevel" /> </packaging>
- Каждый
<autoResourcePackage>
элемент сообщает Visual Studio автоматически разделить ресурсы для заданного имени квалификатора на отдельные пакеты ресурсов. Это называется автоматическое разделение. С содержимым файла, который вы уже сделали, вы на самом деле не изменили поведение Visual Studio. Другими словами, Visual Studio уже ведет себя так, как если бы этот файл присутствовал с этим содержимым, так как это значения по умолчанию. Если вы не хотите, чтобы Visual Studio автоматически разделяла имя квалификатора, удалите этот<autoResourcePackage>
элемент из файла. Вот как будет выглядеть файл, если вы хотите, чтобы все языковые ресурсы были встроены в пакет приложения вместо автоматического разделения на отдельные пакеты ресурсов.<packaging> <autoResourcePackage qualifier="Scale" /> <autoResourcePackage qualifier="DXFeatureLevel" /> </packaging>
- Сохраните и закройте файл и перестроите проект.
Чтобы убедиться, что выбранные варианты автоматического разделения учитываются, найдите файл <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>