自从毕了业,好久没更新了,今天突发奇想,过来更新一下,嘻嘻!

  一般在做版本升级时,要锁定版本号进行对比,然后联网检索可用的升级包信息,在用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#项目版本号自定义位置自动向上增加小工具设计与实现的更多相关文章

  1. Wix 安装部署教程(八) 自动生成XML小工具

    这个功能类似于Heat.exe,指定文件夹,生成对应的WIX标签.Winform做的,代码简单,生成的标签需要粘贴到对应的目录才能使用,并不是一步到位. 需要设定两个参数,一个是文件夹路径,一个是文件 ...

  2. IIS监控应用程序池和站点假死,自动重启IIS小工具

    文章技术适合初学者.高级的C#开发工程师这些估计都熟悉到烂了,望不要喷. 第一.C#代码要操作IIS 就必须先导入 Microsoft.Web.Administration.dll ,方便控制台程序做 ...

  3. opencv(4)实现数据增加小工具

    数据增加(data augmentation),作为一种深度学习中的常用手段,数据增加对模型的泛化性和准确性都有帮助.数据增加的具体使用方式一般有两种,一种是实时增加,比如在Caffe中加入数据扰动层 ...

  4. 自动按键的Sendkeys工具的下载和使用

    大家好! 下面介绍一款自动按键的小工具:Sendkeys 下载地址 Sendkeys.rar 按键脚本的书写规则如下: 启动本工具后,在工具中打开一个脚本文件,然后在工具中按下Ctrl+A全选所有脚本 ...

  5. [0] C#软件项目版本号的命名规则及格式介绍

    版本控制比较普遍的 3 种命名格式 : 一.GNU 风格的版本号命名格式 : 主版本号 . 子版本号 [. 修正版本号 [. 编译版本号 ]] 英文对照 : Major_Version_Number. ...

  6. 如何在spingboot项目中自定义自己的配置

    在实际开发中,为了方便我们常常会考虑把配置文件的某一类配置映射到配置类上,方便spring容器加载,实现方法如下: 1. 书写配置文件信息:书写某一类特定字段开头的配置信息,例如在yml配置文件中可以 ...

  7. 记录-Intellij Idea下以Tomcat运行Web项目时的位置问题

    今天本来准备把原来的一个Web项目导入到Idea下,之前这个项目是用eclipse写的,容器用的tomcat,首先导入前我把一些没用的配置文件都给删了,像什么.eclipse..setting什么的, ...

  8. Atitit. 查找linux 项目源码位置

    Atitit. 查找linux 项目源码位置 1. netstat   -anp |grep 801 1.1. 1.3 启动关闭nginx3 1.2. 找到nginx配置文件4 1.3. ./etc/ ...

  9. Eclipse中定位当前文件在项目中的位置

    点击红色框内的按钮,就能定位当前文件在项目中的位置, 另外, 找到位置后记得再点击一下这个按钮, 要不然每次打开一个文件都会自动定位

随机推荐

  1. Linux根目录缺少x权限,产生的两个错误

    错误一:root用户执行systemctl命令报误 [root@node1 ~]# systemctl restart sshd * (pkttyagent:10364): WARNING *: Un ...

  2. mysql自动安装脚本

    #!/bin/bashif [ -d /software ] ;then cd /softwareelse mkdir /software && cd /softwarefi #is ...

  3. Centos6.8安装并配置VNC

    一般服务器都会在IDC或云端,为了可以看到服务器的图形化界面,需要安装配置VNC,本例为Centos6.8上安装配置VNC. [root@hostname ~]#yum install -y tige ...

  4. 第10组 Beta冲刺 (3/5)(组长)

    1.1基本情况 ·队名:今晚不睡觉 ·组长博客:https://www.cnblogs.com/cpandbb/p/14018630.html ·作业博客:https://edu.cnblogs.co ...

  5. iview 按需引入解决加载慢的问题

    如果出现加载2s以上的情况请先查看服务器是否对大文件进行过压缩优化处理. 按照官方文档把iview引入到vue的项目中,全部引入的时候没问题.当按官方文档显示的按需加载是借助插件babel-plugi ...

  6. mybatis(CRUD)

    3.mybatis(CRUD) 有了mybatis,我们要对数据库进行增删改查只需要操作接口和mapper.xml文件,然后进行测试就可以了. 实例代码如下: 接口 public interface ...

  7. 关于jar包和war读取静态文件

    在war包中static中的静态文件,打成jar包后却读取不到,这是为什么呢,让我门看下两种读取的区别 一.war包中都取静态模板文件 public static void download(Stri ...

  8. 学习javaScript必知必会(4)~事件、事件绑定、取消事件冒泡、事件对象

    1.常用的事件: ① onload:页面加载 ② onblur: 失去焦点 onfocus: 获取焦点 ③ onclick:点击 ④ onmouseover:鼠标经过 onmouseout:鼠标离开 ...

  9. 《剑指offer》面试题43. 1~n整数中1出现的次数

    问题描述 输入一个整数 n ,求1-n这n个整数的十进制表示中1出现的次数. 例如,输入12,1-12这些整数中包含1 的数字有1.10.11和12,1一共出现了5次. 示例 1: 输入:n = 12 ...

  10. 《剑指offer》面试题53 - II. 0~n-1中缺失的数字

    问题描述 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字. 示例 1: 输入: [ ...