Loading... # 期望 git打标签之后自动构建上传nuget商店。 # 核心发版代码(webhook为打标签触发): ```shell dotnet publish SageTools.Console/SageTools.Console.csproj -o pack -c Release dotnet pack/SageTools.Console.dll -source="../SageTools/SageTools.csproj" -version="${CI_COMMIT_REF_NAME}" dotnet build SageTools/SageTools.csproj -c Release dotnet pack SageTools/SageTools.csproj -o pack ls pack dotnet nuget push pack/SageTools.${CI_COMMIT_REF_NAME}.nupkg -s https://api.nuget.org/v3/index.json -k apiKey ``` 其中`${CI_COMMIT_REF_NAME}`为阿里云效构建的时候的环境变量,也就是要指定的版本号,如果是其他构建方式,可以替换为指定的版本号即可,即:`-version=xxx`。 亦或者不使用 `-version`参数,改用`-step`参数,版本号将会在最后一个版本号上增加指定的数目,比如 `-step=2`,当前版本是 `1.0.0` ,那处理后的版本则为 `1.0.2`。 # 实现逻辑 1. 编写版本号处理程序 2. 用处理程序改变配置文件版本号 3. 然后正常打包发布 处理程序代码 ```csharp using System; using System.IO; using SageTools.Extension; using System.Linq; using System.Xml; namespace SageTools.Console { internal class Program { static void Main(string[] args) { var help = args.Any(x => x.Contains("-h")); if (help) { System.Console.WriteLine($"-source= 文件相对路径 {Environment.NewLine}-step= 版本号步长值(整数){Environment.NewLine}-version= 直接指定版本,忽略-step"); Environment.Exit(0); } System.Console.WriteLine("处理xml文件"); var source = args.Where(x => x.Contains("-source=")).Select(x => x.Replace("-source=", "")).FirstOrDefault(); var step = args.Where(x => x.Contains("-step=")).Select(x => x.Replace("-step=", "")).FirstOrDefault(); var version = args.Where(x => x.Contains("-version=")).Select(x => x.Replace("-version=", "")).FirstOrDefault(); if (source.IsNullOrEmpty()) { System.Console.WriteLine("执行错误:必须指定 -source"); Environment.Exit(-1); } var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, source); if (!File.Exists(path)) { System.Console.WriteLine($"执行错误:【{path}】文件不存在"); Environment.Exit(-1); } var xmlDoc = new XmlDocument(); //新建XML文件 xmlDoc.Load(path); //加载XML文件 var versionNode = xmlDoc.DocumentElement?.SelectSingleNode("PropertyGroup")?.SelectSingleNode("Version"); if (versionNode == null) { System.Console.WriteLine("执行错误:项目没有配置版本号"); Environment.Exit(-1); } if (version.IsNullOrEmpty()) { version = versionNode.InnerText; var lastNum = version.Substring(version.LastIndexOf(".", StringComparison.Ordinal) + 1); var newNum = lastNum.ToInt32() + step; var newVersion = version.Substring(0, version.LastIndexOf(".", StringComparison.Ordinal) + 1) + newNum; versionNode.InnerText = newVersion; System.Console.WriteLine($"当前版本{version},末尾版本号{lastNum},新版本号{newVersion}"); } else { System.Console.WriteLine($"直接指定新版本号为 {version}"); versionNode.InnerText = version; } xmlDoc.Save(path); System.Console.WriteLine("处理完毕!"); } } } ``` # 最终效果 1. 写完新功能 2. git 提交 3. 打标签 1.0.8 4. 推送 5. 收到nuget已发布通知邮件 最后修改:2023 年 01 月 16 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏