Как Visual Studio создает манифест пакета приложения

при построении проекта с Visual Studio Visual Studio создает манифест пакета (AppxManifest.xml), который содержит сведения, необходимые системе для развертывания, вывода или обновления приложения универсальная платформа Windows (UWP).

Существует два вида файлов манифеста пакета приложения, которые могут возникнуть при разработке приложения с Visual Studio

  • Package.appxmanifest
    Это XML-файл стиля, используемый разработчиками для настройки сведений о приложении, таких как сведения об издателе, логотипы, архитектуры процессоров и т. д. Это легко настраиваемая временная версия манифеста пакета приложения, используемая во время разработки приложения.
  • AppxManifest.xml
    этот файл создается Visual Studio процессом сборки и основывается на информации в файле Package. appxmanifest. Это окончательная версия манифеста пакета приложения, используемого с опубликованными и загруженные неопубликованные приложениями. Если в файл Package. appxmanifest вносятся какие либо обновления, необходимо перестроить проект, чтобы просмотреть обновления в файле AppxManifest.xml.

Общие сведения о процессе упаковки см. в статье Упаковка приложения UWP с помощью Visual Studio.

Проверка манифеста приложения

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

  • Синтаксическая проверка
    Visual Studio проверяет, соответствуют ли все данные в манифесте приложения схеме манифеста приложения.
  • Семантическая проверка
    Visual Studio предоставляет рекомендации по ожидаемым данным на основе контекста сведений.

Примечание

Если в этих разделах не упоминается искомое поле, оно формируется из данных, которые могут быть настроены отдельно, или по умолчанию из схемы манифеста.

Создание содержимого манифеста

Visual Studio заполняет поля в следующих таблицах при формировании файла AppxManifest.xml для пакета приложения.

Идентификация

IdentityРаздел манифеста приложения содержит следующие поля.

Поле Описание
Имя Имя пакета, которое заполняется по-разному в следующих сценариях:
  • По умолчанию значением этого поля является созданный GUID.
  • если вы связываете приложение с Microsoft Store или вызываете команду Store- > Create app packages... , а затем выполняете вход с помощью учетной записи разработчика, значение этого поля извлекается из связанного приложения в Microsoft Store или в центре партнеров.
  • Если вы вызываете команду Store- > CREATE App Packages... , но не входите с помощью учетной записи разработчика, значение этого поля берется из манифеста источника.
Publisher Имя издателя. Это имя заполняется по-разному в следующих сценариях.
  • По умолчанию значением этого поля является имя пользователя.
  • если вы связываете приложение с Microsoft Store или вызываете команду Store- > Create app packages... , а затем выполняете вход с помощью учетной записи разработчика, значением этого поля будет издатель, связанный с учетной записью.
  • Если вы вызываете команду Store- > CREATE App Packages... , но не выполняете вход с помощью учетной записи разработчика, значение этого поля совпадает с полем Subject тестового сертификата, который использовался для подписания пакета приложения.
Visual Studio поддерживает только форму общего имени (cn) для издателя и добавляет префикс "CN =" в поле издателя в манифесте.
Версия Версия создаваемого приложения. Это обычно увеличивается каждый раз, когда приложение было изменено и упаковано. Чтобы обеспечить Version правильное увеличение значения, используйте диалоговое окно, предоставляемое при вызове хранилища — > Создание пакетов приложений... для обновления.
ProcessorArchitecture Значение, создаваемое на основе конфигурации сборки, указанной для проекта. Если ссылки проекта или ссылки на файлы в проекте ориентированы на другую определенную архитектуру, чем пакет приложения, возникает ошибка сборки, и необходимо изменить целевую архитектуру пакета приложения для работы со всеми ссылками.

Ниже приведен пример Identity выходного XML.

<Identity Name="Microsoft.UWPAppExample"
          Publisher="CN=Microsoft Corporation"
          Version="1.0.0.0"
          ProcessorArchitecture="x86" />

Свойства

PropertiesРаздел манифеста приложения содержит поля, приведенные в следующей таблице.

Поле Описание
PublisherDisplayName Эта строка заполняется по-разному в следующих сценариях:
  • По умолчанию значением этого поля является имя пользователя.
  • если вы связываете приложение с Microsoft Store или вызываете команду Store- > Create app packages... , а затем выполняете вход с помощью учетной записи разработчика, tha значение этого поля соответствует строке PublisherDisplayName, связанной с вашей учетной записью разработчика.
  • Если вы вызываете команду Store- > CREATE App Packages... , но не входите с помощью учетной записи разработчика, значение этого поля будет иметь имя пользователя, если в файле Package. appxmanifest не указано иное.
DisplayName Эта строка заполняется по-разному в следующих сценариях.
  • По умолчанию значением этого поля является имя проекта.
  • если вы связываете приложение с Microsoft Store или вызываете команду Store- > Create app packages... , а затем выполняете вход с помощью учетной записи разработчика, значение этого поля заполняется в соответствии со следующими правилами:
    • Если указать это значение в исходном манифесте, а значение начинается с @ (что означает, что вы хотите локализовать это значение), значение этого поля будет соответствовать указанному.
    • Если выбранное приложение имеет только одно имя, значением будет это имя.
    • Если выбранное приложение имеет несколько имен, но исходный манифест не локализован, в качестве значения задается отображаемое имя в исходном манифесте. В противном случае, значение равно первому зарезервированному имени.
  • Если вы вызываете команду Store- > CREATE App Packages... , но не входите с помощью учетной записи разработчика, значение этого поля берется из манифеста источника.
Эмблема шаблон Visual Studio будет использоваться Assets\StoreLogo.png по умолчанию. Это значение должно быть настроено разработчиком в файле Package. appxmanifest.

Ниже приведен пример Properties выходного XML.

<Properties>
    <DisplayName>UWP App Example</DisplayName>
    <PublisherDisplayName>Microsoft Corporation</PublisherDisplayName>
    <Logo>Assets\StoreLogo.png</Logo>
</Properties>

Развертывание

Манифест приложения может содержать несколько Application элементов, каждый из которых имеет отображаемое имя, отображаемое на плитке в клиенте. ApplicationРаздел манифеста приложения содержит поля, приведенные в следующей таблице.

Поле Описание
Идентификатор Эта строка заполняется по-разному в следующих сценариях.
  • По умолчанию значением этого поля является имя проекта.
  • если вы связываете приложение с Microsoft Store или вызываете команду Store- > Create app packages... , а затем выполняете вход с помощью учетной записи разработчика, значение этого поля является именем приложения для выбранного приложения, если /Properties[@DisplayName] и /Applications/Application[@DisplayName] в исходном манифесте совпадают. В противном случае, значение останется тем же, что и в манифесте источника.
  • Если вы вызываете команду Store- > CREATE App Packages... , но не входите с помощью учетной записи разработчика, значение этого поля совпадает с исходным манифестом.
Исполняемый файл Значением этого поля является выходное имя сборки проекта. Исполняемый токен $targetnametoken $.exe, используемый в исходном файле манифеста (Package. appxmanifest), заменяется фактическим именем файла при сборке манифеста.
EntryPoint Это значение основано на созданных Executable значениях и Id .

Пример Application выходных данных:

<Applications>
    <Application Id="App" Executable="UWPAppExample.exe" EntryPoint="UWPAppExample.App">
        <!-- Other elements configured within the Application, such as Extensions, VisualElements, etc. -->
</Applications>

PackageDependency

PackageDependencyраздел содержит все зависимости библиотеки компонентов Windows для этого пакета. например, если проект содержит ссылку на WinJS, Visual Studio извлекает сведения об удостоверении пакета для зависимостей при создании манифеста. Visual Studio заполнит этот раздел Name полями и MinVersion для каждого зависимого пакета.

в проекте C++ для машинного кода Visual Studio добавит ссылку на среду выполнения Visual C/C++:

<Dependencies>
    <PackageDependency Name="Microsoft.VCLibs.140.00.Debug" MinVersion="14.0.30035.0" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" />
</Dependencies>

модули регистрации среда выполнения Windows

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

Система поддерживает два типа серверов: DLL-серверы (внутрипроцессные) и EXE-серверы (внепроцессные). Для этих серверов требуются похожие, но различные сведения о регистрации, которые необходимо скопировать в манифест приложения. Visual Studio поддерживает создание манифеста только для DLL-серверов, для регистрации DLL-серверов требуется расширение DLLServer. Следующие значения в манифесте приложения взяты из файлов WinMD для построения расширения DLLServer.

  • DllPath.
  • ActivatableClassId.
  • ThreadingModel.
  • ActivatableClass (атрибут ActivatableClassId).

Ниже приведен пример выходного XML.

<extension category="Microsoft.Windows.ActivatableClass">
    <dllServer>
        <dllPath>Fabrikam.dll</dllPath>
        <activatableClass activatableClassId="Fabrikam.MyClass" threadingModel="sta" />
    </dllServer>
</extension>

дополнительные сведения об этом разделе см. в разделе среда выполнения Windows components.

Ресурсы

ResourcesРаздел содержит запись для каждого языка, поддерживаемого приложением. Необходимо указать по крайней мере один язык ресурсов в манифесте приложения. Visual Studio автоматически создает список поддерживаемых языков на основе сведений о локализации в проекте. Маркер языка ресурсов "x-Generate", используемый в исходном файле манифеста (Package. appxmanifest), заменяется фактическим кодом языка при сборке манифеста. Ниже приведен пример выходного XML.

<Resources>
    <Resource Language="en-us">
    <Resource Language="fr-fr">
</Resources>

Первая запись в списке является языком по умолчанию для приложения.

TargetDeviceFamily

TargetDeviceFamilyРаздел содержит следующие поля:

  • Имя
  • MinVersion
  • Maxversiontested укажите установленную
<Dependencies>
    <TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.17763.0" MaxVersionTested="10.0.22000.0" />
</Dependencies>

эти элементы заполняются из MSBuild свойств.

См. также раздел

Упаковка приложения UWP с помощью Visual Studio
Архитектуры пакетов приложений
Справочник по схемам манифеста пакетов Windows 10