尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Windows桌面应用交付总卡在缺运行环境?.NET Windows Desktop Runtime 把安装包这件小事做完了

Windows桌面应用交付总卡在缺运行环境?.NET Windows Desktop Runtime 把安装包这件小事做完了 Windows桌面应用交付总卡在缺运行环境.NET Windows Desktop Runtime 把安装包这件小事做完了【免费下载链接】windowsdesktop项目地址: https://gitcode.com/gh_mirrors/wi/windowsdesktop把编译好的 WinForms 程序发给客户双击却弹出 To run this application, you must install .NET。这一句话几乎每个做 Windows 桌面应用部署的开发者都见过。别急着背锅——你缺的不是技术而是一个能把 WinForms 与 WPF 运行时完整打包、随应用一起分发的开源项目.NET Windows Desktop Runtimewindowsdesktop 仓库。本文不罗列功能清单只回答三个真实问题用户电脑是裸机怎么办两个桌面框架怎么保证版本一致老用户怎么平滑升级每一道题都能在仓库源码里找到对应的解法。难题一用户机器上啥都没有运行环境从哪来把应用比作钥匙运行时就是锁芯适配器——钥匙再好没有适配器也拧不动锁。传统做法是让用户先手动装 .NET Framework然后祈祷他别装错版本、别点到旧链接。这个项目的解法在src/windowsdesktop/src/bundle/目录用 WiX 生成安装引导程序bundle。打开bundle.wxs你会发现它不是一个下一步—下一步的空壳而是把版本判断、架构检查、升级关系全写进了安装逻辑。比如它通过注册表与文件系统搜索dotnet.exe的实际位置检测 x86 与 ARM64 的安装路径冲突避免同一台机器出现两套互不认识的运行时。最终产出一个带界面的单文件安装包双击即装用户全程不需要理解运行时是什么。难题二WinForms 和 WPF 各自维护怎么保证打的是一套运行时WinForms 和 WPF 由两个独立仓库维护若各打各的包版本错位是迟早的事。该项目把两者收编进src/windowsdesktop/src/sfx/由两个工程统一产出Microsoft.WindowsDesktop.App.Ref引用程序集随 .NET SDK 自动引用新建 WinForms/WPF 项目即可直接使用命名空间Microsoft.WindowsDesktop.App.Runtime负责运行时要分发的全部内容。WindowsForms.Packaging.targets里的校验逻辑更有意思构建前会检查Microsoft.Private.Winforms包中的FileClassification.props和 analyzer 是否齐全缺一个直接报错把装了一半的包拦在发布之前。难题三老用户要升级、海外用户看不懂英文怎么处理bundle.wxs中有一段RelatedBundle升级关系定义了 preview → RC → GA → 服务更新servicing的完整升级链路——用户无需先卸载旧版新版安装包会主动接管并替换。安装器同时支持/install、/repair、/uninstall、/layout等命令行参数企业可以用脚本批量静默部署配合/quiet、/passive。多语言方面bundle/theme/目录按 LCID 划分了 14 套本地化文件1033 英文、2052 简体中文、1028 繁体中文、1031 德文、1041 日文、1042 韩文、1049 俄文等。每套thm.wxl控制安装向导的按钮文案与提示语整体界面样式由bundle.thm统一驱动——想定制品牌色或按钮布局改这两个文件即可。 动手验证把安装包构建链路跑起来想亲眼看看这套打包逻辑克隆仓库git clone https://gitcode.com/gh_mirrors/wi/windowsdesktop重点看三处src/windowsdesktop/src/bundle/安装包、src/windowsdesktop/src/sfx/运行时打包、根目录的Build.proj与WindowsDesktop.sln构建入口。CI 流程在azure-pipelines.yml中定义。仓库还自带tests/目录NuGetArtifactTester.cs会下载构建产物并校验程序集完整性。具体构建参数与依赖版本以仓库内文档及官方发布说明为准。⚠️ 三个容易踩的坑源码里其实已写了答案别假设所有 DLL 都有版本号。sfx/Directory.Build.props显式放行了PenImc_cor3.dll、wpfgfx_cor3.dll等原生组件——它们没有 FileVersion 却必须进入安装包。如果你的发布脚本对版本号做强校验这类文件会静默漏掉。安装路径不能拍脑袋。bundle 会区分 x86/ARM64 的 Program Files 路径并做相似性比对手动改安装目录前先看bundle.wxs里的条件逻辑。升级不等于卸载重装。善用/layout生成离线副本配合稳定不变的 UpgradeCode才能覆盖预览版到正式版的过渡场景。结语.NET Windows Desktop Runtime 做的事其实很朴素把 WinForms/WPF 运行时的打包、多语言、升级、架构兼容一次性做好让安装即用成为默认体验。下次再有人问 Windows 桌面应用部署为什么这么省心答案就藏在这个仓库的 bundle 与 sfx 两个目录里。【免费下载链接】windowsdesktop项目地址: https://gitcode.com/gh_mirrors/wi/windowsdesktop创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表