• 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配置好的项目,即可修改相应的值,结果如下图:

      

  • 相关阅读:
    (十三)学习CSS之两个class连一起隔空格和逗号
    (十二)学习CSS之box-sizing 属性
    (五)学习JavaScript之firstChild 属性
    (四)学习JavaScript之className属性
    (三)学习JavaScript之getElementsByTagName方法
    两张表一对多的连接,取多记录表中最新的一条数据
    oracle 快照
    Linux常用命令大全
    baidu 快递查询API
    oracle 触发器实现主键自增
  • 原文地址:https://www.cnblogs.com/thyou/p/15901804.html
Copyright © 2020-2023  润新知