You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinUI3应用Github Action无法上传MSIX包及安装分发问题

WinUI3 + Github Action 部署问题与分发方案咨询

问题背景

首次用WinUI3搭配Github Action,按微软官方文档配置工作流后,运行成功但没上传MSIX文件,还有两个疑问:

  1. 仓库里没有bin文件夹,要不要手动创建?
  2. 本地解决方案里的bin文件夹,能不能提交到仓库?
    另外,WinUI3桌面应用分发遇到麻烦:本地用“打包和发布”生成的MSIX靠本地信任证书能正常跑,但发给别人就提示未签名,想找类似WPF的安装部署方案。

附原Workflow的YML文件:

# This workflow will build and publish a WinUI 3 unpackaged desktop application
# built on .NET.

name: WinUI 3 unpackaged app

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:

  build:

    strategy:
      matrix:
        configuration: [Release]
        platform: [x64, x86]

    runs-on: windows-latest  # For a list of available runner types, refer to
                             # https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on

    env:
      Solution_Name: TestMatchReplay.sln                         # Replace with your solution name, i.e. App1.sln.

    steps:
    - name: Checkout
      uses: actions/checkout@v2
      with:
        fetch-depth: 0

    # Install the .NET Core workload
    - name: Install .NET Core
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: 6.0.x

    # Add  MSBuild to the PATH: https://github.com/microsoft/setup-msbuild
    - name: Setup MSBuild.exe
      uses: microsoft/setup-msbuild@v1.0.2

    # Restore the application to populate the obj folder with RuntimeIdentifiers
    - name: Restore the application
      run: msbuild $env:Solution_Name /t:Restore /p:Configuration=$env:Configuration
      env:
        Configuration: ${{ matrix.configuration }}

    # Create the app by building and publishing the project
    - name: Create the app
      run: msbuild $env:Solution_Name /t:Publish /p:Configuration=$env:Configuration /p:Platform=$env:Platform
      env:
        Configuration: ${{ matrix.configuration }}
        Platform: ${{ matrix.platform }}

    # Upload the app
    - name: Upload app
      uses: actions/upload-artifact@v2
      with:
        name: Upload app
        path: ${{ env.Solution_Name }}\\bin

解答

一、Github Action相关疑问

  1. 仓库无需手动创建bin文件夹
    bin是编译时自动生成的输出目录,Github Action的构建步骤会在编译过程中自动创建,不用提前在仓库里手动建。

  2. 本地bin绝对不能提交到仓库
    bin里是编译产生的二进制文件、临时产物,体积大且每次构建都会变,必须加到.gitignore里,禁止提交。标准.NET项目的.gitignore规则默认已经包含bin和obj,按默认来就行。

二、Workflow未上传MSIX的修复

原Workflow的问题是上传路径错误+构建目标不对:

  • 你参考的是非打包式WinUI3应用的文档,但实际要构建MSIX包,原命令/t:Publish针对的是非打包应用,而且上传路径${{ env.Solution_Name }}\\bin找错了——MSIX一般生成在打包项目的bin\${{ matrix.configuration }}\${{ matrix.platform }}\AppPackages目录下。

修正后的Workflow示例(替换打包项目名称为你的实际项目名):

name: WinUI 3 MSIX Package Build

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:
    strategy:
      matrix:
        configuration: [Release]
        platform: [x64, x86]

    runs-on: windows-latest

    env:
      Solution_Name: TestMatchReplay.sln
      Package_Project: TestMatchReplay.Package.csproj # 替换成你的打包项目名称

    steps:
    - name: Checkout code
      uses: actions/checkout@v4
      with:
        fetch-depth: 0

    - name: Install .NET 6.0
      uses: actions/setup-dotnet@v4
      with:
        dotnet-version: 6.0.x

    - name: Setup MSBuild
      uses: microsoft/setup-msbuild@v2

    - name: Restore solution
      run: msbuild $env:Solution_Name /t:Restore /p:Configuration=${{ matrix.configuration }} /p:Platform=${{ matrix.platform }}

    - name: Build and publish MSIX package
      run: msbuild $env:Package_Project /t:Publish /p:Configuration=${{ matrix.configuration }} /p:Platform=${{ matrix.platform }} /p:AppxPackageDir=./AppPackages/

    - name: Upload MSIX artifact
      uses: actions/upload-artifact@v4
      with:
        name: MSIX-Package-${{ matrix.platform }}
        path: ./AppPackages/**/*.msix

三、WinUI3桌面应用分发方案

1. 解决MSIX签名问题

MSIX必须有受信任的数字签名才能在他人设备运行:

  • 购买正规代码签名证书:从CA机构买证书,打包时用它签名MSIX,用户安装时系统会自动信任(前提是用户设备信任该CA根证书)。
  • 企业内部分发:企业内用的话,部署企业证书服务器,把内部根证书推给所有员工设备,用企业证书签名即可正常安装。

2. 类似WPF的传统部署(非MSIX)

不想用MSIX的话,把WinUI3作为非打包式应用发布,和WPF分发逻辑一致:

  • 发布时选「框架依赖」或「独立部署」:
    • 框架依赖:用户设备需提前装对应.NET Runtime,发布包体积小。
    • 独立部署:把.NET Runtime和应用打包在一起,用户不用提前装框架,包体积大。
  • 发布后把所有文件压缩成ZIP发给用户,解压后直接运行exe就行。
  • 可选:用Inno Setup、NSIS这类第三方工具做传统安装程序,实现一键安装、创建快捷方式等功能。

内容的提问来源于stack exchange,提问作者VMi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 05:37:55