首页/新闻资讯/正文详情

Lumafly发布全流程:从dotnet publish到macOS .app打包与Windows自更新器的部署实践

发布时间:2026/9/25 7:39:58 来源:云帆数科 栏目:资讯中心
Lumafly发布全流程:从dotnet publish到macOS .app打包与Windows自更新器的部署实践
Lumafly发布全流程从dotnet publish到macOS .app打包与Windows自更新器的部署实践【免费下载链接】LumaflyA cross platform mod manager for Hollow Knight written in Avalonia.项目地址: https://gitcode.com/gh_mirrors/lu/LumaflyLumafly 是一款用 C# 和 Avalonia 编写的《空洞骑士》跨平台 Mod 管理器。本文带你完整走通它的发布流程用dotnet publish一次性构建 Windows / Linux / macOS 三平台单文件版本用 Python 脚本把二进制包进 macOS.app应用包并搭建基于 appcast 订阅源的 Windows 自更新器。一图看懂发布流水线 整条流水线由一个批处理脚本 Scripts/publish.bat 驱动核心环节如下阶段工具产物三平台构建dotnet publish单文件模式Lumafly.exe/ osx 与 linux 的LumaflymacOS 打包Scripts/make_mac_app.pymac.zip压缩发布包7zwindows.zip/linux.zip自更新器构建Lumafly.AU/publish.batLumafly.AU.exe更新订阅源Scripts/make_appcast.pyappcast.xml开始前先把仓库克隆到本地git clone https://gitcode.com/gh_mirrors/lu/Lumafly第 1 步dotnet publish 一键构建三平台publish.bat对三个 RID 各执行一次dotnet publish关键参数组合是dotnet publish -r win-x64 -p:PublishSingleFiletrue -p:ConfigurationRelease \ --self-contained true -p:IncludeNativeLibrariesForSelfExtracttrue -p:DebugTypeembedded几个值得注意的细节--self-contained true用户机器无需安装 .NET 运行时开箱即用PublishSingleFiletrue整个应用收敛为单个可执行文件便于分发和更新DebugTypeembedded调试符号直接嵌入 exe发布目录干净利落脚本开头会先清空out目录保证每次都是干净构建版本号集中在 Lumafly/Lumafly.csproj 的Version节点当前为3.3.0.0发新版只需改这一个地方再重新 publish。第 2 步Python 脚本组装 macOS .app 包macOS 要求程序装在标准 bundle 里。仓库中预置了模板目录 Scripts/Lumafly.app/Contents/Info.plist声明可执行文件名、应用图标、Retina 支持及自定义 URL 协议Info.plistContents/MacOS/可执行文件占位Contents/Resources/Lumafly.icns应用图标然后运行 Scripts/make_mac_app.py它做三件事遍历.app模板把全部文件写入mac.zip将 osx-x64 发布出的Lumafly二进制写入 zip 内的Contents/MacOS/run并把Lumafly.pdb重命名为run.pdb一并打包关键细节通过ZipInfo.external_attr 0o100755 16为 zip 条目写入-rwxr-xr-x的 Unix 权限位并标记 host 为 UNIX —— 少了这一步macOS 会拒绝执行第 3 步7z 压缩出发布包mac.zip生成后脚本再用两条7z a命令把 windows 与 linux 的 publish 目录压成windows.zip和linux.zip。三个 zip 加上下文的Lumafly.AU.exe就是一次完整发布的交付物。第 4 步打造 Windows 自更新器 Lumafly.AU设计思路很巧妙不让主程序自己替换自己而是做一个小安装器 Lumafly.AU/把新版Lumafly.exe以嵌入式资源的方式塞进去Lumafly.AU.csproj 中EmbeddedResource IncludeLumafly.exe /并且开启了PublishAot。更新器 Lumafly.AU/Program.cs 的工作流程从启动参数拼接出当前运行的 Lumafly 完整路径拼接是为了避免路径含空格被拆成多个参数把内嵌的新版 exe 写为Lumafly-Update.exe删除旧 exe再把新文件改名回原位手动运行时还会自动拉起新版应用它还内置了对旧项目名的改名兼容逻辑历史用户升级也不会断档。构建时只需把新发布的Lumafly.exe放到 csproj 旁边再跑Lumafly.AU/publish.bat即可。第 5 步用 make_appcast.py 生成 appcast 更新源Scripts/make_appcast.py 接收一个版本号参数可带v前缀在仓库根目录维护一份 RSS 2.0 格式的 appcast.xml每次发版向channel顶部插入新的itemsparkle:releaseNotesLink指向该版本的 changelog 文件enclosure指向该版本 Release 中的Lumafly.AU.exe并标注sparkle:oswindows运行时AppUpdater 下载Lumafly.AU.exe把当前 exe 路径作为参数传给安装器替换完成后自动重启全程无需用户手动操作。应用内检查更新一套代码两条路径 Lumafly/Services/AppUpdater.cs 按操作系统分流Windows接入 NetSparkleUpdater支持启动时自动检查与用户手动触发下载成功后自动安装并重启RelaunchAfterUpdate truemacOS / Linux改为「手动检查」——拉取仓库中托管的UpdateLinks.json更新链接与程序解耦换地址不用发新版比较最新 tag 与本地版本弹窗让用户选择「获取最新版」或「继续使用」兜底策略下载失败时弹出错误提示用浏览器打开下载页并退出程序保证用户总能拿到新版视频与更多资料 项目提供了视频演示帮助新用户快速上手。更新日志的完整历史见 CHANGELOG.md。发布速查清单 ✅提升 Lumafly/Lumafly.csproj 中的Version版本号更新 CHANGELOG.md 并放置到 static-resources 的 Changelogs 目录运行 Scripts/publish.bat产出out/下的三个 zip将新Lumafly.exe放入 AU 项目旁运行 Lumafly.AU/publish.bat运行make_appcast.py 版本号更新并提交 appcast.xml将Lumafly.AU.exe与三个 zip 一并上传到新版本 Release【免费下载链接】LumaflyA cross platform mod manager for Hollow Knight written in Avalonia.项目地址: https://gitcode.com/gh_mirrors/lu/Lumafly创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

COMSOL两相流水平集仿真:原理、实操与液滴生成全解析
COMSOL两相流水平集仿真:原理、实操与液滴生成全解析

写这篇的主要原因,是我发现很多朋友卡在“两相流”这个概念上。一打开COMSOL,看到水平集、相场、动网格、移动网格一堆接口,不知道哪个适合自己,也不知道选完以后那一大堆默认参数到底是什么意思。尤其做微流控、液滴生成、气泡上升、喷墨打印… · 2026/9/25 7:39:46

用AI Agent检测MCP安全风险:从配置到验证的完整实践
用AI Agent检测MCP安全风险:从配置到验证的完整实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 7:39:46

二手车价格预测天池竞赛项目:LightGBM特征工程与调参实战指南
二手车价格预测天池竞赛项目:LightGBM特征工程与调参实战指南

简介:针对天池二手车价格预测竞赛的高分项目资源包,面向参赛选手以及需要完成毕业设计、期末大作业的机器学习学习者,聚焦二手车交易价格这一回归预测问题。压缩包共十六个文件,含两个核心笔记本文件(分别实现LightGBM… · 2026/9/25 7:39:46

百度世界大会2024:AI应用开发与本地部署实战指南
百度世界大会2024:AI应用开发与本地部署实战指南

1. 从百度世界大会看AI“狂飙”的底层逻辑百度世界大会这几年我基本每年都有关注,2024年这一届给我的感觉和往年完全不一样。往年更多是秀肌肉、发新品,今年则明显在传递一个信号:AI不再是一个独立赛道,而是开始像水电一样渗透进所… · 2026/9/25 8:06:55

SOAR 报告生成中的 Markdown 语法与 Markdown2HTML 转换机制详解
SOAR 报告生成中的 Markdown 语法与 Markdown2HTML 转换机制详解

开发工具数据库 【免费下载链接】soar SQL Optimizer And Rewriter 项目地址: https://gitcode.com/gh_mirrors/so/soar 点击查看 免费下载 导读 本篇技术指南以 soar(SQL Optimizer And Rewriter)仓库中的 Markdown 语法测试样例 TestMark… · 2026/9/25 8:06:30

AI 编程工具配置 TaoToken:Cursor、bolt.new、Devv.ai 的 settings.json 与 config.toml 骨架
AI 编程工具配置 TaoToken:Cursor、bolt.new、Devv.ai 的 settings.json 与 config.toml 骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 8:06:30

windows在程序和功能中隐藏已安装软件
windows在程序和功能中隐藏已安装软件

在 Windows 中从“程序和功能”(控制面板中的卸载程序列表)隐藏软件而不是卸载 需要通过修改注册表来实现。以下是方法:(推荐谨慎操作) 打开注册表编辑器按 Win R,输入 regedit,回车导航到卸… · 2026/9/25 8:06:24

Atlas 300V 24G推理卡部署YOLO全流程实战:从环境配置到性能调优
Atlas 300V 24G推理卡部署YOLO全流程实战:从环境配置到性能调优

这个项目标题只有“atlas”加上两个热度很高的关联搜索词:“atlas部署yolo”和“atlas 300v 24g 是运算加速卡吗”,看起来像是在挑选硬件和推理方案。我最近正好在搞Atlas 300V系列卡的部署,这卡在国产推理卡里话题度确实高,24G显… · 2026/9/25 8:06:18

RabbitMQ面试实战指南:从选型对比到权限排查全解析
RabbitMQ面试实战指南:从选型对比到权限排查全解析

最近带团队做技术面试复盘时发现一个很有意思的现象:聊到"RabbitMQ面试题"这个概念,绝大多数候选人能顺畅背出交换机类型、确认机制、死信队列这些名词,但只要面试官把问题换成"你现在要重新搭一套消息架构,用Rabb… · 2026/9/25 8:06:12

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码