您的位置:首页 > 其它

自动增加项目构建或修订编号的脚本

2011-02-25 16:31 323 查看

背景

以前用 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"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: