news 2026/8/20 17:49:47

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零构建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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/20 17:45:04

阶段二(机器学习与神经网络)实战笔记

阶段二(机器学习与神经网络)实战笔记 本篇覆盖「周 5 机器学习」与「周 6 神经网络」两个动手实验。 全部代码在 真实华为云 ECS(Ubuntu 24.04 / 8 vCPU / 16 GB)上运行,仅使用 numpy / pandas / matplotlib / scikit-…

作者头像 李华
网站建设 2026/8/20 17:44:45

阶段四(周 10–11)PyTorch 基础实战

阶段四(周 10–11)PyTorch 基础实战实验环境:华为云 m3(Ubuntu 24.04,8 vCPU / 16 GB,CPU 版 PyTorch 2.13)。 全部脚本在远程 m3 真实运行,结果均为真实 stdout / 指标;…

作者头像 李华
网站建设 2026/8/20 17:41:18

零基础AI入门:12周走完一条不劝退的人工智能学习路线

零基础AI入门:12周走完一条不劝退的人工智能学习路线 【免费下载链接】AI-For-Beginners 12 Weeks, 24 Lessons, AI for All! 项目地址: https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners 很多人的AI入门计划,最终都停在了"收藏&qu…

作者头像 李华
网站建设 2026/8/20 17:39:44

QQ空间说说备份终极指南:3步快速导出全部历史说说

QQ空间说说备份终极指南:3步快速导出全部历史说说 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 上个月整理手机相册时,我一不小心把存了七年的QQ空间截图全部清…

作者头像 李华