Visual Studio 如何生成应用包清单
使用 Visual Studio 生成项目时,Visual Studio 会 (AppxManifest.xml) 生成包清单,其中包含系统部署、显示或更新通用 Windows 平台 UWP (应用程序所需的信息。
如果使用 Visual Studio 开发应用程序,则会遇到两种应用程序包清单文件:
- Package.appxmanifest
这是一种 XML 样式文件,开发人员使用该文件配置应用程序的详细信息,如发布者信息、徽标、处理器体系结构等。这是应用程序开发期间使用的应用程序包清单的可配置临时版本。 - AppxManifest.xml
此文件由 Visual Studio 生成过程生成,基于 appxmanifest.xml 文件中的信息。 这是用于已发布应用和旁加载应用的应用程序包清单的最终版本。 如果对 appxmanifest.xml 文件进行了任何更新,则必须重新生成项目才能查看 AppxManifest.xml 文件中的更新。
有关打包过程的概述,请参阅使用 Visual Studio 打包 UWP 应用。
验证应用程序清单
您必须先纠正导致任何 Visual Studio 验证检查失败的所有错误,然后才能发布您的应用程序。 在 Visual Studio 生成清单时,Visual Studio 会通过以下方式验证您的应用程序:
- 语法验证
Visual Studio 确认应用程序清单中的所有数据是否都符合应用程序清单架构。 - 语义验证
Visual Studio 根据信息的上下文提供针对所需数据的指导。
注意
如果这些部分不涉及你要查找的字段,则从可能已单独配置的数据或清单架构中的默认值生成。
生成清单内容
Visual Studio 在生成应用包的 AppxManifest.xml 文件时,填充下表中的字段。
标识
Identity
应用程序清单的部分包含以下字段。
字段 | 说明 |
---|---|
名称 | 包的名称,在下列情况下,将以不同的方式填充包的名称:
|
Publisher | 发行者的名称。 在以下几种情况下,会以不同方式填充此名称:
|
版本 | 正在生成的应用的版本。 这通常会在每次修改并打包应用时递增。 若要确保 Version 正确递增,请使用调用 " 存储- > 创建应用包 ... " 时提供的对话框进行更新。 |
ProcessorArchitecture | 一个基于您为项目指定的生成配置生成的值。 如果项目中的项目引用或文件引用的目标体系结构不同于应用程序包,则会引发生成错误,并且必须更改应用包的目标体系结构,使其适用于所有引用。 |
下面是输出 XML 的示例 Identity
:
<Identity Name="Microsoft.UWPAppExample"
Publisher="CN=Microsoft Corporation"
Version="1.0.0.0"
ProcessorArchitecture="x86" />
属性
Properties
应用程序清单的部分包含下表中的字段。
字段 | 说明 |
---|---|
PublisherDisplayName | 在以下方案中,此字符串的填充方式不同:
|
DisplayName | 在以下几种情况下,会以不同方式填充此字符串:
|
徽标 | 默认情况下,Visual Studio 模板将使用 Assets\StoreLogo.png 。 Appxmanifest.xml 文件中的开发人员应自定义此值。 |
下面是输出 XML 的示例 Properties
:
<Properties>
<DisplayName>UWP App Example</DisplayName>
<PublisherDisplayName>Microsoft Corporation</PublisherDisplayName>
<Logo>Assets\StoreLogo.png</Logo>
</Properties>
应用程序
应用程序清单可以包含多个 Application
元素,每个元素都有一个显示名称,它显示在客户端上的磁贴上。 Application
应用程序清单的部分包含下表中的字段。
字段 | 说明 |
---|---|
ID | 在以下几种情况下,会以不同方式填充此字符串:
|
可执行文件 | 此字段的值是项目程序集的输出名称。 源清单文件中使用的可执行标记 $targetnametoken $.exe,在生成清单时,将使用实际文件名替换 (appxmanifest.xml) 。 |
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 从 WinMD 文件提取 Windows 运行时注册信息,并在应用程序清单中生成相应 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 运行时组件。
资源
Resources
部分包含应用程序支持的每种语言的条目。 在应用程序清单中必须至少指定一种资源语言。 Visual Studio 将根据项目中的本地化信息自动生成受支持语言的列表。 生成清单时,将在源清单文件中使用的资源语言标记 "x-生成" (appxmanifest.xml) 替换为实际语言代码。 下面是输出 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 属性进行填充。