zoukankan      html  css  js  c++  java
  • 自动增加项目构建或修订编号的脚本

    背景

    以前用 NANT 构建项目时,有个自动递增修订编号(Revision)的功能。现在转用 Visual C# 了,虽然可以用“[assembly: AssemblyVersion("1.0.0.*")]”的形式让编号自动递增,但递增数很大,而且不是从1开始。于是就写了个脚本,让修订编号(或构建编号)从现有的值开始,每次递增1。

    原理

    用脚本查找 AssemblyInfo.cs 里面 AssemblyVersion,修改相应的编号。
    每次生成时调用此脚本,则可自动递增构建或修订编号。

    脚本代码

    var n = WScript.Arguments(0); // AssemblyInfo 文件名
    var c = WScript.Arguments.length > 1 ? WScript.Arguments(1) : ""; // 生成配置
    var s = new ActiveXObject("ADODB.Stream");
    	s.Open();
    	s.Type = 2;
    	s.CharSet = "UTF-8"; //注意这个编码不用弄错,否则文件会被损坏。Visual Studio默认使用 UTF-8保存包含中文的代码文件 
    	s.LoadFromFile (n);
    var t = s.ReadText ();
    var r = /\[assembly: AssemblyVersion \("(\d+\.\d+\.)(\d+)\.(\d+)"\)\]/g;
    var a = r.exec(t);
    if (a != null && a.length > 1) {
    	var m = a[1]; // Major.Minor.
    	var b = parseInt(a[2]); // Build
    	var rv = parseInt(a[3]); // Revision
    	if (c != "Release") { //根据构建配置修改编号 
    		rv++;
    	}
    	else {
    		b++;
    	}
    	var v = "[assembly: AssemblyVersion (\""+m+b+"."+rv+"\")]";
    	WScript.StdOut.WriteLine ("更改程序集版本: " + a[0] + "->" + v);
    	s.Position = 0;
    	s.WriteText (t.replace(r, v));
    	s.SaveToFile (n, 2);
    }
    else {
    	WScript.StdErr.WriteLine ("错误: 找不到 AssemblyVersion 属性。");
    }
    

    使用方法

    将上述代码保存为“AutoIncrementBuildNumber.js”,放在解决方案的目录。
    在工程的预生成事件或生成后事件中,添加一行代码:
    CScript.exe "$(SolutionDir)AutoIncrementBuildNumber.js" "$(SolutionDir)Properties\AssemblyInfo.cs" "$(ConfigurationName)"

    每次 Debug 生成,修订编号增加1;每次 Release 生成,构建编号增加1。

    如使用下面的代码,则只修改修订编号:
    CScript.exe "$(SolutionDir)AutoIncrementBuildNumber.js" "$(SolutionDir)Properties\AssemblyInfo.cs"


    如只希望在 Release 生成时才修改编号,可在命令前加条件,如:

    if /I "$(ConfigurationName)" == "Release" CScript.exe "$(SolutionDir)AutoIncrementBuildNumber.js" "$(SolutionDir)Properties\AssemblyInfo.cs"
  • 相关阅读:
    高盛、沃尔玛 题做出来还挂了的吐槽
    amazon师兄debrief
    到所有人家距离之和最短的中点 296. Best Meeting Point
    问问题没人回答的情况怎么办终于有解了
    找名人 277. Find the Celebrity
    数组生存游戏 289. Game of Life
    547. Number of Provinces 省份数量
    428. Serialize and Deserialize Nary Tree 序列化、反序列化n叉树
    alias别名简介和使用
    面试官:线程池执行过程中遇到异常会发生什么,怎样处理? Vincent
  • 原文地址:https://www.cnblogs.com/pdfpatcher/p/1965018.html
Copyright © 2011-2022 走看看