[BuildRelease]python修改源代码中的版本信息
一 源代码中的版本信息
1).net
在.net的程序中通常有assemblyinfo(.cs / .vb / .cpp)文件来包含dll/exe的版本信息。如下某assemblyinfo.cs中包含如下:
[assembly: AssemblyVersion("5.00.100.00")]
[assembly: AssemblyFileVersion("5.00.100.00")]
更通常的做法是,一个product拥有相同的版本号信息,所以产品下所有的projects公用一个assemblyinfo文件,这个公用的文件一般被更名为globalassemblyinfo(.cs / .vb / .cpp )。
2)C++
对于C++的projects,版本信息被存储在.RC文件中。但是更通用的做法是所有的C++ projects 的.RC 引用一个globalversioninfo.h(或globalproductversion.h).
其中globalversioninfo.h中包含了版本信息字符串常量的定义,如下:
globalversioninfo.h
#define FILEVER 1,0,0,1
#define PRODUCTVER 1,0,0,1
#define STRFILEVER "1, 0, 0, 1\0"
#define STRPRODUCTVER "1, 0, 0, 1\0"
手动修改所有的projects中的.RC文件如下:
* .rc
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
# include "globalversioninfo.h"
VS_VERSION_INFO VERSIONINFO
FILEVERSION FILEVER
PRODUCTVERSION PRODUCTVER
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "080404b0"
BEGIN
VALUE "CompanyName", "TODO: <Company name>"
VALUE "FileDescription", "TODO: <File description>"
VALUE "FileVersion", STRFILEVER
VALUE "InternalName", "TestCpp.exe"
VALUE "LegalCopyright", "Copyright (C) 2011"
VALUE "OriginalFilename", "TestCpp.exe"
VALUE "ProductName", "TODO: <Product name>"
VALUE "ProductVersion", STRPRODUCTVER
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x804, 1200
END
END
参考:http://support.microsoft.com/kb/237870/
二 python来修改assemblyinfo和versioninfo中的版本号
在自动化的build流程中,在downlaod代码后build前需要修改版本信息。
代码如下:
import os
import os.path
import sys
import re
def UpdateVersionForFile(file, regrexorplaceholder, version):
f = open(file,"r")
filestr = f.read()
f.close()
newfilestr = re.sub(regrexorplaceholder,version, filestr)
if not os.access(file,os.W_OK):
os.chmod(path,stat.S_IWRITE)
newf = open(file,"w")
newf.write(newfilestr)
newf.close()
def UpdateVersion(dirorfile, regrexorplaceholder, version):
if os.path.isfile(dirorfile) and os.path.exists(dirorfile):
UpdateVersionForFile(dirorfile, regrexorplaceholder, version)
else:
print ("update failed")
def usage():
helpstr = " \n \
Usage: \n \
The first parameter need be the file, \n \
The second parameter need be regrex or placeholder for version, \n \
The third parameter need be version. \n \
Examples: \n \
updateversion.py globalAssemblyInfo.cs (\d+\.\d+\.\d+\.\d+) 10.2.0.123456 \n \
updateversion.py globalAssemblyInfo.cpp (\d+\.\d+\.\d+\.\d+) 10.2.0.123456 \n \
print (helpstr)
if __name__ == "__main__":
if( not len(sys.argv) == 4):
print(" The parameters are not correct!")
usage()
exit(0)
UpdateVersion(sys.argv[1], sys.argv[2], sys.argv[3])
exit(1)
完!


浙公网安备 33010602011771号