当前位置: 首页 > news >正文

从零构建Windows桌面运行时安装包:.NET Windows Desktop Runtime完整指南

从零构建Windows桌面运行时安装包:.NET Windows Desktop Runtime完整指南

【免费下载链接】windowsdesktop项目地址: https://gitcode.com/gh_mirrors/wi/windowsdesktop

很多独立开发者第一次发布 WinForms 或 WPF 应用时,都会卡在同一个问题上:自己电脑上运行好好的程序,发给客户却提示"缺少运行时"。而 .NET Windows Desktop Runtime 这个开源项目,正是微软用来解决这个问题的官方"安装包制造工厂"——它的源码就放在 windowsdesktop 仓库里,本篇文章带你从头看懂它。

三句话认识这个项目

  • 它是什么:一个负责"打包" .NET 桌面运行时的开源仓库,编译产物就是官方发布的 Windows Desktop Runtime 安装包(约 60MB 的 exe)。
  • 它能做什么:把 WinForms 和 WPF 两大桌面框架的几百个 DLL、本机组件和宿主程序,编排成可按顺序安装、可静默部署、可自动升级的安装器。
  • 适合谁:想给客户提供"双击即装"体验的应用作者、需要批量给企业电脑装环境的 IT 人员,以及想了解微软打包工程的人。

传统做法 vs 这个仓库:差在哪

过去给用户装 .NET 环境,通常要手动下载 .NET Framework 安装包,再祈祷它和系统里已有版本不冲突。这个仓库换了一种思路:把依赖关系写死在安装器里,让安装器自己按顺序办事。

打开 src/windowsdesktop/src/bundle/bundle.wxs 你能看到一条清晰的"安装链条",四个组件必须依次登场:

Host(宿主)→ HostFxr(依赖解析器)→ Runtime(.NET 运行时)→ WindowsDesktopRuntime(桌面运行时)

每装完一层,下一步才有依赖可循。翻译成大白话:这就像一个搬家流程——先搬床架,再铺床垫,最后放枕头,顺序错了就乱套。而且整个链条被RollbackBoundary包住,任何一个环节失败,之前装的都会被自动回滚,不会给用户留下一台装了一半的电脑。

5分钟跑通:从源码到安装包

上手不需要理解全部细节,跟着做就行。

第 1 步:拉取源码。仓库地址是https://gitcode.com/gh_mirrors/wi/windowsdesktop,执行:

git clone https://gitcode.com/gh_mirrors/wi/windowsdesktop

完成后你会看到src/windowsdesktop/src/下有两个关键目录——bundle/(负责安装包和界面)和sfx/(负责运行时 DLL 的整理)。完成这一步,你将看到完整的仓库目录树。

第 2 步:找到打包配置。桌面运行时的内容清单写在 src/windowsdesktop/src/sfx/Microsoft.WindowsDesktop.App.Runtime.sfxproj 里,里面逐条列着 WPF 专属组件,比如PresentationFramework.Fluent.dllwpfgfx_cor3.dll这些"长得像乱码"但缺一不可的文件。完成这一步,你将知道运行时包里到底装了哪些东西。

第 3 步:触发构建。用 Visual Studio 打开仓库根目录的WindowsDesktop.sln,或直接用 CLI 构建bundle工程,即可产出安装包。完成这一步,你将拿到一个属于自己的 Windows Desktop Runtime 安装程序。

实战:一条命令搞定静默部署

最实用的场景是给公司几十台电脑批量装环境。安装器的命令行参数就藏在 src/windowsdesktop/src/bundle/theme/2052/thm.wxl 的"安装帮助"字符串里,翻译过来就是:

windowsdesktop-runtime.exe /install /quiet /norestart /log install.log

/quiet表示全程不弹窗,/norestart禁止强制重启,/log把过程写进日志方便排查。IT 人员把这行命令写进批处理,就能一口气给整层楼的电脑装完运行时,装没装成功看日志就知道。

新手最常踩的 3 个坑

坑 1:报"缺少 .NET Runtime",其实缺的是桌面运行时。解决办法:普通 .NET 运行时只管控制台程序,WinForms/WPF 需要额外装 Windows Desktop Runtime,两者不是一回事。

坑 2:x86 和 x64 装混了。仓库同时产出 win-x86、win-x64、win-arm64 三种版本(见sfxproj里的InstallerRuntimeIdentifiers),32 位程序配 32 位运行时,装错版本会一直启动失败。先确认客户程序的位数,再选安装包。

坑 3:想改中文界面却找不到入口。安装界面文案不在代码里,而在bundle/theme/目录下按语言编码分好的 14 个文件里——简体中文是2052/thm.wxl,英语是1033/thm.wxl。想改按钮文字,直接编辑对应文件即可,无需重编译程序。

看完代码,下一步去哪

  • 想深入打包逻辑:精读 src/windowsdesktop/src/bundle/bundle.wxs 里的Chain段落,那是整个安装器的骨架。
  • 想了解测试保障:src/windowsdesktop/tests/下有用 xUnit 写的包校验测试,专门检查产物里是否缺文件、清单是否完整。
  • 想跟进官方动态:仓库的eng/目录维护着版本号和构建流水线配置,Versions.props里能看到当前迭代到了哪个大版本。

写在最后

从"手动装环境碰运气"到"一条命令静默部署",Windows 桌面应用的分发体验,就是这个仓库一砖一瓦搭起来的。如果你的下一步是给用户一个开箱即用的程序,不妨先把源码拉下来,跑一次构建,亲手把那个 60MB 的安装包做出来——你会亲眼看到,所谓"部署难题"是怎么被拆解成一行行有序的依赖的。

【免费下载链接】windowsdesktop项目地址: https://gitcode.com/gh_mirrors/wi/windowsdesktop

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.cnnetsun.cn/news/4121160.html

相关文章:

  • RyuSAK 使用教程:免费工具一次搞定 Ryujinx 固件、密钥、着色器与存档
  • 阶段二(机器学习与神经网络)实战笔记
  • 阶段四(周 10–11)PyTorch 基础实战
  • mybatis-generator-gui-extension 实战教程:3步连接 MySQL 数据库并生成第一个 Mapper 文件
  • 零基础AI入门:12周走完一条不劝退的人工智能学习路线
  • QQ空间说说备份终极指南:3步快速导出全部历史说说
  • 从入门到精通:Blazor.Extensions.Canvas 学习路线图与资源清单
  • 同样刷一天招聘网站,为什么有人拿到5个面试,有人颗粒无收?Boss Show Time插件揭秘职位发布时间
  • 不学PS也能修好图:免费开源 IOPaint 的 AI 图像修复实战笔记
  • PyABSA 快速上手指南:5 步跑通你的第一个方面级情感分析模型
  • hcsshim网络配置实战:HNS与HCN API从入门到精通
  • 如何用 ComfyUI-KJNodes 快速优化 AI 工作流:安装、避坑与进阶指南
  • 自动化调参神器:用EPyMARL search.py高效搜索超参数
  • 联合类型与类型断言实战:TypeScript-New-Handbook 帮你消灭 80% 类型报错
  • SteamEmulator:无需Steam轻松实现局域网联机的终极方案
  • Rufus 制作启动 U 盘完整指南:从 ISO 到可引导盘的每一步
  • QQ空间说说一键备份:GetQzonehistory导出工具实操指南
  • Linux网络故障排查:TCP/IP连接问题诊断六步法
  • Axure RP 汉化其实只差一个文件:axure-cn 语言包从取包到验收的完整流程
  • 告别 gmad.exe:用 GMPublisher 三步搞定加里模组工坊发布
  • 热键被“偷“了怎么办?Hotkey Detective 三步揪出占用快捷键的元凶
  • 被“锁“住的歌单:用 Unlock-Music 在浏览器里解开QQ音乐、网易云音乐等加密文件
  • GPBoost源码架构深度解析:C++核心如何优雅驱动Python与R双语言
  • jellyfin-plugin-douban实战教程:如何一键刮削电影评分、简介与演员元数据
  • 5 分钟快速上手 torrent-cli:安装配置与第一个磁力搜索命令完整教程
  • 猫抓扩展完整上手指南:免费网页资源嗅探工具,视频音频图片一键下载
  • 网页视频下载再也不用求人了:开源资源嗅探扩展「猫抓」的实测笔记
  • 并发服务异常后应留下哪些可复查记录
  • 什么是devEops?一文读懂开发自运维平台如何重塑自动化运维流程
  • 2026年电商数据工具排行榜:自建还是用现成的?6款工具横向测评