使用单项目 MSIX 将应用打包

借助单项目 MSIX 功能,可以使用 Windows 应用 SDK 生成 MSIX 打包的桌面应用,而无需使用单独的打包项目。 此功能目前作为独立的 Visual Studio 扩展提供,可用于以下方案:

  • 使用 Windows 应用 SDK 中的“打包的空白应用(WinUI 3 桌面版)”模板创建新的桌面项目。 这些项目已配置为将应用生成到 MSIX 包中,而无需使用单独的打包项目。
  • 修改使用 Windows 应用 SDK 创建的现有桌面 WinUI 3 项目,这样就不再需要单独的打包项目。

Comparing packaging project to single project

概述

本部分介绍有关单项目 MSIX 功能的一些重要详细信息。

优点

在引入单项目 MSIX 功能之前,需要在解决方案中提供以下两个项目来生成 MSIX 打包的桌面应用:应用项目,以及一个单独的 Windows 应用程序打包项目。 借助单项目 MSIX 功能,只需使用应用项目就能开发和生成应用。 这可以提供更简洁的项目结构和更直接的开发体验。 例如,不再需要选择单独的打包项目作为启动项目。

支持的项目类型

单项目 MSIX 功能的当前版本支持 Visual Studio (C# 和 C++) Windows 应用 SDK中的 WinUI 3 模板

限制

单项目 MSIX 仅支持生成的 MSIX 包中的单个可执行文件。 如果需要将多个可执行文件组合到单个 MSIX 包中,必须继续在解决方案中使用 Windows 应用程序打包项目。

安装单项目 MSIX 打包工具

单项目 MSIX 打包工具(包括可用于创建新 MSIX 打包的 WinUI 3 应用的项目模板)包含在Visual Studio的 Windows 应用 SDK 扩展中。 有关 SDK 的安装说明,请参阅安装Windows 应用 SDK工具

Windows 应用 SDK 0.8 和 C# 版本 1.0 预览版 3:单项目 MSIX 打包工具不包括在Windows 应用 SDK 0.8 Visual Studio的 Windows 应用 SDK 扩展中,或者对于最多包含预览版 3 的 C# 项目Windows 应用 SDK 1.0。 因此,如果使用这些版本,则需要使用以下链接显式安装单项目 MSIX 打包工具。

创建新项目

如果使用的是 Windows 应用 SDK 1.0 预览版 2 或更高版本,则可以使用“打包的空白应用(WinUI 3 桌面版)”模板新建一个包含单项目 MSIX 支持的基于 WinUI 3 的项目。 有关详细信息,请参阅 创建第一个 WinUI 3 项目

修改现有项目

按照以下步骤修改使用 Windows 应用 SDK 创建的现有桌面 WinUI 3 项目,以便生成 MSIX 包所需的包清单和其他支持位于应用程序项目中,而不是位于打包项目中。

步骤 1:创建打包项目或打开现有的打包项目

如果已有 WinUI 3 桌面应用的解决方案, (请在包含Windows应用程序打包Project的 Visual Studio) 中看到 WinUI 3 模板,然后立即在Visual Studio中打开该解决方案。

否则,按照“创建第一个 WinUI 3”项目中的说明,在 Visual Studio 中的桌面项目中创建新的 WinUI 3。

A project using the packaging project

步骤 2:编辑应用程序项目设置

接下来,编辑某些配置设置以使用单项目 MSIX 功能。 要参考的说明根据项目类型和 Visual Studio 版本而有所不同。

  1. 在“解决方案资源管理器”中,双击应用程序的项目节点以在 XML 编辑器中打开 .csproj 文件。 将以下 XML 添加到主 PropertyGroup 元素<>

    <EnablePreviewMsixTooling>true</EnablePreviewMsixTooling>
    <PublishProfile>Properties\PublishProfiles\win10-$(Platform).pubxml</PublishProfile>
    

    完成后,PropertyGroup 元素应如下所示<>

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <OutputType>WinExe</OutputType>
        <TargetFramework>net6.0-windows10.0.19041.0</TargetFramework>
        ...
        <UseWinUI>true</UseWinUI>
        <EnablePreviewMsixTooling>true</EnablePreviewMsixTooling>
        <PublishProfile>Properties\PublishProfiles\win10-$(Platform).pubxml</PublishProfile>
      </PropertyGroup>
    
  2. 保存更改并关闭 .csproj 文件。

  3. 根据所用的 Visual Studio 版本执行以下过程之一。

    对于 Visual Studio 2019:

    1. 在“解决方案资源管理器”中,右键单击应用程序的项目节点并选择“属性”。

    2. 选择“调试”选项卡并将“Launch”属性设置为“MsixPackage”。 如果在首次尝试时该属性恢复原始值,可能必须选择此设置两次。

      Enabling MsixProject option

    3. 保存所做更改。

    对于 Visual Studio 2022:

    1. 在“解决方案资源管理器”中,右键单击应用程序项目节点下的“属性”文件夹,然后选择“添加”>“新建项”。

    2. 选择“文本文件”,将新文件命名为“launchSettings.json”,然后单击“添加”。 确保新文件位于应用程序项目的“属性”文件夹中。

    3. 将以下设置复制到新文件中。 你可以根据自己的方案随意更改值。 MyApp 值可以是任意字符串;它不需要与应用程序的名称相匹配。

      {
          "profiles": {
              "MyApp": {
                  "commandName": "MsixPackage",
                  "commandLineArgs": "", /* Command line arguments to pass to the app. */
                  "alwaysReinstallApp": false, /* Uninstall and then reinstall the app. All information about the app state is deleted. */
                  "remoteDebugEnabled": false, /* Indicates that the debugger should attach to a process on a remote machine. */
                  "allowLocalNetworkLoopbackProperty": true, /* Allow the app to make network calls to the device it is installed on. */
                  "authenticationMode": "Windows", /* The authentication scheme to use when connecting to the remote machine. */
                  "doNotLaunchApp": false, /* Do not launch the app, but debug my code when it starts. */
                  "remoteDebugMachine": "", /* The name of the remote machine. */
                  "nativeDebugging": false /* Enable debugging for managed and native code together, also known as mixed-mode debugging. */
              }
          }
      }
      
    4. 保存并关闭 launchSettings.json 文件。

步骤 3:将文件移到应用程序项目

接下来,将几个重要的文件移到应用程序项目。 要参考的说明根据项目类型和 Visual Studio 版本而有所不同。

  1. 在“文件资源管理器”中,将“Package.appxmanifest”文件和“Images”文件夹从打包项目移到应用程序项目。 请将此文件和文件夹放在应用程序项目文件夹层次结构的顶层。
  2. 从解决方案中删除打包项目。

Illustration of moving files to main app

步骤 4:在配置管理器中启用部署

  1. 选择“生成”->“配置管理器”。
  2. 在“配置管理器”中,对配置和平台的每个组合单击“部署”复选框(例如“调试”和“x86”、“调试”和“arm64”、“发布”和“x64”等) 。

    注意

    请务必使用顶部的“活动解决方案配置”和“活动解决方案平台”下拉菜单,而不是与“部署”复选框位于相同行中的“配置”和“平台”下拉菜单 。

Enabling Deploy in Configuration Manager

步骤 5:部署应用

生成并部署应用程序项目。 Visual Studio 会将应用程序生成到 MSIX 包中,安装该包,然后运行应用程序。

步骤 6:打包应用以进行发布

使用 Visual Studio 中的“打包并发布”命令打包应用程序,以发布到 Store。

自动生成并打包单项目 MSIX 应用

可以使用 msbuild 生成并打包单项目 MSIX 应用,从而可以将工作流自动化。 对单项目解决方案使用的方法和命令行只是与你在双项目解决方案(其中包括 Windows 应用程序打包项目)中所用的略有不同。

单项目解决方案的重要生成命令选项是 /p:GenerateAppxPackageOnBuild=true。 如果不使用该选项,则项目将会生成,但你不会获得 MSIX 包。 如果包含该选项,则会生成 MSIX 包。

我们以生成 WinUI 3 单项目解决方案的 GitHub 操作形式提供了一个完整示例。

注意

单项目 MSIX 目前不支持生成 MSIX 包(请参阅捆绑 MSIX 包)。 它只生成单个 MSIX。 但是,你可以使用 MSIX 捆绑程序 GitHub 操作将 .msix 文件捆绑到 MSIX 包中。

提供反馈

若要向我们发送反馈、报告问题或提出有关单项目 MSIX 功能的问题,请在 Windows 应用 SDK GitHub 存储库上发布话题或问题。