C#项目版本号自定义位置自动向上增加小工具设计与实现
自从毕了业,好久没更新了,今天突发奇想,过来更新一下,嘻嘻!
一般在做版本升级时,要锁定版本号进行对比,然后联网检索可用的升级包信息,在用VS做C#项目组件版本管理时,是一个很麻烦的事,每次Release之前都要硬核的去改AssemblyInfo.cs文件的版本信息,采用VS官方推荐的[assembly: AssemblyVersion("1.0.*")]格式最后生成的版本号是1.0.1589.39645之类的,留给自定义的只剩下前两位,对于有个性的开发者明显彰显不出咱们的个性,所以下面和大家说一个相对来说比较好用的方法或逻辑,假设能有一个小程序在每次Release之前,去自动修改AssemblyInfo.cs文件中对应的版本号,代替我们手动去修改,修改的值为某年某月某日到今天发布的累计小时数,就达到了自动修改并向上叠加的目的,废话不多说,上正文。
右击项目属性,选择“生成事件”,输入如下命令:
1 if $(ConfigurationName)==Release
2 (
3 "$(SolutionDir)AutoVersion.exe" $(ProjectDir)
4 )
如下图所示

其中的参数意义,可点击“编辑预先生成”按钮后,打开编辑界面,点击“宏”按钮查看相应变量的值,此处不做过多的解释,只需要记住这个是用于调用AutoVersion.exe程序并把当前项目文件的根路径作为参数传进去的作用就行了,
下面说一下AutoVersion.exe程序的具体逻辑,首先获取AssemblyInfo.cs问价的路径,然后读取该文件中的AssemblyVersion的值,并对其进行修改,然后重新写入到文件中,具体代码如下:
1 using System;
2 using System.Collections.Generic;
3 using System.IO;
4 using System.Linq;
5 using System.Text;
6 using System.Xml;
7
8 namespace AutoVersion
9 {
10 class Program
11 {
12 static void Main(string[] args)
13 {
14 try
15 {
16 if (args.Length <= 0)
17 return;
18 if (!Directory.Exists(args[0]))
19 return;
20 string strPath = Path.Combine(args[0] + "/Properties/AssemblyInfo.cs");
22 if (File.Exists(strPath))
23 {
24 string[] strinfo = File.ReadAllLines(strPath, Encoding.UTF8);
25 DateTime startTime = new DateTime(2020, 1, 1);
26 TimeSpan ts = DateTime.Now - startTime;
27 int littleVersion = ts.Hours + ts.Days * 24;
28
29 for (int i = 0; i < strinfo.Length; i++)
30 {
31 string startStr = "AssemblyVersion(\"";
32 string endStr = "\")]";
33 string pointStr = ".";
34 if (strinfo[i] != "" && strinfo[i].Contains(startStr) && strinfo[i].Contains(endStr) && strinfo[i].Contains(pointStr))
35 {
36 string[] strArr = strinfo[i].Split('.');
37 if (strArr != null && strArr.Length == 4)
38 {
39 int startIndex = strinfo[i].LastIndexOf(pointStr) + 1;
40 int endIndex = strinfo[i].IndexOf(endStr);
41 if (endIndex > startIndex)
42 {
43 string headerStr = strinfo[i].Substring(0, startIndex);
44 string enderStr = strinfo[i].Substring(endIndex, strinfo[i].Length - endIndex);
45 strinfo[i] = headerStr + littleVersion + enderStr;
46 }
47 }
48 }
49 }
50 File.WriteAllLines(strPath, strinfo, Encoding.UTF8);
51 }
52 }
53 catch (Exception ex)
54 {
55 Console.WriteLine(ex.ToString());
56 }
57 }
58 }
59 }
Release生成AutoVersion.exe文件,放到 $(SolutionDir) 的值所在的文件夹内,重新Release配置好的项目,即可修改相应的值,结果如下图:

C#项目版本号自定义位置自动向上增加小工具设计与实现的更多相关文章
- Wix 安装部署教程(八) 自动生成XML小工具
这个功能类似于Heat.exe,指定文件夹,生成对应的WIX标签.Winform做的,代码简单,生成的标签需要粘贴到对应的目录才能使用,并不是一步到位. 需要设定两个参数,一个是文件夹路径,一个是文件 ...
- IIS监控应用程序池和站点假死,自动重启IIS小工具
文章技术适合初学者.高级的C#开发工程师这些估计都熟悉到烂了,望不要喷. 第一.C#代码要操作IIS 就必须先导入 Microsoft.Web.Administration.dll ,方便控制台程序做 ...
- opencv(4)实现数据增加小工具
数据增加(data augmentation),作为一种深度学习中的常用手段,数据增加对模型的泛化性和准确性都有帮助.数据增加的具体使用方式一般有两种,一种是实时增加,比如在Caffe中加入数据扰动层 ...
- 自动按键的Sendkeys工具的下载和使用
大家好! 下面介绍一款自动按键的小工具:Sendkeys 下载地址 Sendkeys.rar 按键脚本的书写规则如下: 启动本工具后,在工具中打开一个脚本文件,然后在工具中按下Ctrl+A全选所有脚本 ...
- [0] C#软件项目版本号的命名规则及格式介绍
版本控制比较普遍的 3 种命名格式 : 一.GNU 风格的版本号命名格式 : 主版本号 . 子版本号 [. 修正版本号 [. 编译版本号 ]] 英文对照 : Major_Version_Number. ...
- 如何在spingboot项目中自定义自己的配置
在实际开发中,为了方便我们常常会考虑把配置文件的某一类配置映射到配置类上,方便spring容器加载,实现方法如下: 1. 书写配置文件信息:书写某一类特定字段开头的配置信息,例如在yml配置文件中可以 ...
- 记录-Intellij Idea下以Tomcat运行Web项目时的位置问题
今天本来准备把原来的一个Web项目导入到Idea下,之前这个项目是用eclipse写的,容器用的tomcat,首先导入前我把一些没用的配置文件都给删了,像什么.eclipse..setting什么的, ...
- Atitit. 查找linux 项目源码位置
Atitit. 查找linux 项目源码位置 1. netstat -anp |grep 801 1.1. 1.3 启动关闭nginx3 1.2. 找到nginx配置文件4 1.3. ./etc/ ...
- Eclipse中定位当前文件在项目中的位置
点击红色框内的按钮,就能定位当前文件在项目中的位置, 另外, 找到位置后记得再点击一下这个按钮, 要不然每次打开一个文件都会自动定位
随机推荐
- centos 操作系统优化
命令提示符优化 修改PS1环境变化 vim /etc/profile #在最后一行添加 export PS1='[\u@\H \w]$' \u ---显示当前登录用户名称 \h ---显示系统主机名称 ...
- axios导出 excel
this.axios({ methods: 'get', url: url, responseType: 'blob' }).then(res => { const blob = new Blo ...
- atroot 的个人博客
我的个人博客 左上角 MENU 打开导航菜单! 向下滚动查看内容! 为啥我要坚持更新博客 周围有很多小伙伴在问,你写博客会有人看嘛?如果没人看,那岂不是写的就没有意义了吗? 这个问题也一度让我陷入是否 ...
- Spring Security OAuth2 完全解析 (流程/原理/实战定制) —— Client / ResourceServer 篇
一.前言 本文假设读者对 Spring Security 本身原理有一定程度的了解,假设对 OAuth2 规范流程.Jwt 有基础了解,以此来对 SpringSecurity 整合 OAuth2 有个 ...
- HW防守 | Linux应急响应基础
最近也是拿到了启明星辰的暑期实习offer,虽然投的是安服,但主要工作是护网,昨天在公众号Timeline Sec上看到有一篇关于护网的文章,所以在这里照着人家写的在总结一下,为将来的工作打点基础. ...
- linux目录作用
/ 根目录 /bin 命令保存目录(普通用户就可以使用的命令) /sbin 命令保存目录(超级用户才能使用的命令) /boot 启动目录,启动相关文件 /dev 设备文件保存目录 /etc 配置文件保 ...
- C# 实现Parallel.For
static class MyParallel { //4.0及以上用Task, Task的背后的实现也是使用了线程池线程 //static List<Task> tasks = new ...
- spark中job stage task关系
1.1 例子,美国 1880 - 2014 年新生婴儿数据统计 目标:用美国 1880 - 2014 年新生婴儿的数据来做做简单的统计 数据源:https://catalog.data.gov 数据格 ...
- VS2017:win32项目与win32控制台应用程序的转换方法
原文:https://www.cnblogs.com/asuser/articles/12297251.html 刚开始使用VS2017新建项目工程时,有时把应用类型的工程建成控制台类型的工程,在编译 ...
- 机器学习-逻辑回归与SVM的联系与区别
(搬运工) 逻辑回归(LR)与SVM的联系与区别 LR 和 SVM 都可以处理分类问题,且一般都用于处理线性二分类问题(在改进的情况下可以处理多分类问题,如LR的Softmax回归用在深度学习的多分类 ...