【发布时间】:2018-07-28 00:41:08
【问题描述】:
所以我用 Visual Studio Winforms 构建了 AwesomeApplication.exe, 它有一个发布版本的公共存储库。
我想向应用程序添加更新检查器(通知用户新版本可供下载)。
我可以通过 github api 获取最新的发布信息: https://developer.github.com/v3/repos/releases/#get-the-latest-release
但应用程序不“知道”它是哪个 github 发布标签或版本, 除非我在应用程序设置中手动输入(在构建它之前)?然后使用 api,将该硬编码版本字符串与 github 发布标签进行比较。这是可能的,但需要太多的手动工作。想知道还有其他选择吗?
我的发布流程是:
- 在 Visual Studio 中构建应用程序
- 手动压缩 exe
- 手动添加版本并将 zip 上传到存储库
解决方案,修改版@VonC链接:
- 添加 Visual Studio 预构建事件以获取当前最新版本标签(我的预构建脚本启动 powershell 以访问 github api:https://gist.github.com/unitycoder/c4c5330ad3494ee5b2344a0a86324a3d)
- 获取的标签作为PreviousVersion.txt保存在项目文件夹中,该文件在项目中设置为EmbeddedResource(CopyToOutput设置为“Do Not Copy”,因为我不想在文件夹中添加额外的文件)
- 当用户单击应用程序中的“检查更新”按钮时,错误地读取了嵌入的 PreviousVersion.txt 并使用 https://developer.github.com/v3/repos/releases/#get-the-latest-release 将其与当前可用的 github 发布标签进行比较
- 如果字符串不同,则表示用户必须使用旧版本
对此的小更新: 实际上,通过上面的检查,字符串总是不同的,因为在编译时当前的最新版本是 1.10,而在编译和添加新版本之后,它已经是 1.11(编译时字符串是旧的 1.10)。 因此,临时解决方法是浮动或 int 解析您的版本标签号, 例如,比较它是否大 0.1 或 1,然后显示可用更新。
【问题讨论】:
-
你可能想研究一个像 TravisCI 这样的持续集成工具,它可以在你推送到 master 时为你执行标记,也可能在一些资源文件中设置发布版本,然后你的程序会使用它就像它是一个硬编码的属性一样。尽管这需要更多的工作,但从长远来看,它使发布管理和版本控制变得更加容易。