PowerShell 7.4.6 MSIXBundle 缺失:打包流水线到修复的完整排查路径

发布时间:2026/8/31 13:11:21
PowerShell 7.4.6 MSIXBundle 缺失:打包流水线到修复的完整排查路径 PowerShell 7.4.6 MSIXBundle 缺失打包流水线到修复的完整排查路径【免费下载链接】PowerShellPowerShell for every system!项目地址: https://gitcode.com/GitHub_Trending/po/PowerShell你在 Windows 服务器上跑企业部署脚本时到发布页取 PowerShell 7.4.6 的 MSIXBundle 只拿到 404。本文带你顺着打包流水线把四个断点逐个查出来最后在本机把 bundle 手动补回来并验证。一、现象与影响面Windows 侧 7.4.6 的发布产物只有 .msi 和 .zip脚本请求 msixbundle 资产时直接报错Invoke-WebRequest: 404 (Not Found) — PowerShell-7.4.6-win-x64.msixbundle受影响的是用 MSIX 格式做 Windows 11 / Server 2022 零接触部署的用户以及把 .msixbundle 写死进自动化流水线的团队。走 msi / zip 渠道的用户不受影响。二、定位路径排查从变更记录入手逐层下钻到打包脚本、Manifest、下载脚本。四个位置都确认过因果链才闭环。1. 先查 CHANGELOG找到吃掉产物的变更点结论7.4.6 的打包流水线改过产物清理逻辑。CHANGELOG/7.4.md 从第 524 行开始是 7.4.6 段落第 552 行有这条记录liDelete the msix blob if its already there (#24353)/li这条变更本意是避免覆盖旧 blob但已存在就删意味着上一轮产出的 msix 会被发布阶段清掉 → bundle 没能出现在发布页。2. → 进一步查打包脚本本地只产 .msix不产 bundletools/packaging/packaging.psm1 的 msix 分支走到最后一步第 3609 行Start-NativeExecution -VerboseOutputOnError { $makeappx pack /o /v /h SHA256 /d $ProductSourcePath /p (Join-Path -Path $CurrentLocation -ChildPath $packageName.msix) }makeappx pack产出的是单架构.msix不是 bundlebundle 的组装留在发布流水线里而流水线恰恰踩了上一条的清理逻辑 → 本地能验证打包参数bundle 产出却依赖流水线两处得一起修。3. → 再查 Manifest 版本约束验证阶段被跳过assets/AppxManifest.xml 第 23 行TargetDeviceFamily NameWindows.Universal MinVersion10.0.17763.0 MaxVersionTested10.0.18362.0 /MaxVersionTested停在 18362Win10 1903 时代。打包工具在 Windows 11 22H2 上会判定 Manifest未在新系统验证 → 直接跳过 MSIXBundle 生成这是 bundle 缺失的第二重原因。4. → 最后查下载脚本客户端也没有 msix 分支tools/install-powershell.ps1 第 279-284 行只有两个分支if ($IsWinEnv) { if ($UseMSI) { $packageName PowerShell-${release}-win-${architecture}.msi } else { $packageName PowerShell-${release}-win-${architecture}.zip } }第 44 行的-UseMSI开关旁边没有 msix 选项 → 就算发布页补齐了产物官方脚本仍取不到 bundle。这一层属于用户侧的坑。三、修复实操所有改动都在本地工作副本里做上游仓库保持只读。四步有递进关系先拿工作副本再修 Manifest然后补打包目标收尾做端到端验证。步骤 1拿到本地工作副本改什么不动仓库本身克隆一份工作副本。git clone https://gitcode.com/GitHub_Trending/po/PowerShell cd PowerShell验证Test-Path assets/AppxManifest.xml, tools/packaging/packaging.psm1, tools/install-powershell.ps1预期输出True确认后面要动的文件都在位。步骤 2抬升 Manifest 版本上限改什么assets/AppxManifest.xml 第 23 行。- TargetDeviceFamily NameWindows.Universal MinVersion10.0.17763.0 MaxVersionTested10.0.18362.0 / TargetDeviceFamily NameWindows.Universal MinVersion10.0.17763.0 MaxVersionTested10.0.22621.0 /验证(Select-String -Path assets/AppxManifest.xml -Pattern MaxVersionTested10\.0\.22621\.0 | Measure-Object).Count预期输出1。这一步通过验证阶段才不会在新系统上跳过打包。步骤 3给打包项目补 bundle 目标改什么tools/wix/Microsoft.PowerShell.Packaging.csproj 增加 bundle 步骤依赖步骤 2 的 Manifest 先过验证。/ItemGroup Target NameGenerateMSIXBundle AfterTargetsBuild Exec Commandmakeappx bundle /d $(OutputPath) /p $(OutputPath)PowerShell.msixbundle / /Target /Project验证dotnet build tools/wix/Microsoft.PowerShell.Packaging.csproj -c Release -p:Platformx64预期输出Build succeeded.且后续日志无 makeappx 报错。步骤 4端到端验证改什么不再改文件一条命令把构建和产物存在性串起来。dotnet build tools/wix/Microsoft.PowerShell.Packaging.csproj -c Release -p:Platformx64; Test-Path src/powershell-win-core/bin/Release/net8.0/win-x64/PowerShell.msixbundle预期输出True。看到这一行说明链路已通再把改动提交到你们团队的打包分支替换产物即可。四、防复发建议在 test/packaging/windows/ 补一条 MSIXBundle 资产断言缺 bundle 的打包结果不让测试通过。把msi / zip / msixbundle 三类资产齐套写进 docs/maintainers/releasing.md 的发布清单。升级 .NET SDK 前先用 tools/ComponentGovernance/ComponentGovernance.psm1 扫一遍 makeappx 依赖链。五、收尾开头那个 404现在能用四句话讲清流水线清理、Manifest 上限、缺 bundle 目标、脚本无分支。不想自己动手的话升到 7.4.8 及以后的版本即可CHANGELOG/7.4.md 第 451 行已收录 Fix MSIX stage in release pipeline (#25079)。【免费下载链接】PowerShellPowerShell for every system!项目地址: https://gitcode.com/GitHub_Trending/po/PowerShell创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考