WinUI3应用Github Action无法上传MSIX包及安装分发问题
WinUI3 + Github Action 部署问题与分发方案咨询
问题背景
首次用WinUI3搭配Github Action,按微软官方文档配置工作流后,运行成功但没上传MSIX文件,还有两个疑问:
- 仓库里没有bin文件夹,要不要手动创建?
- 本地解决方案里的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相关疑问
仓库无需手动创建bin文件夹
bin是编译时自动生成的输出目录,Github Action的构建步骤会在编译过程中自动创建,不用提前在仓库里手动建。本地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
相关产品推荐
相关产品推荐

