从零构建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.dll、wpfgfx_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),仅供参考
