本文適用於使用subversion版本控制的讀者.
前一段時間研究了一下tortoisesvn的源** , 發現它使用 nant+subwcrev.exe 來自動生成版本號的. subwcrev.exe 是tortoisesvn下的乙個命令列工具, 安裝了tortoisesvn 就找到它. 這裡補充一下tortoisesvn的版本號命名方式, 它的版本號是: 主版本號(majorversion).從版本號(minorversion).小版本號(microversion) build svn**庫的修訂版本號, 其中主版本號(majorversion), 從版本號(minorversion), 小版本號(microversion) 是通過配置檔案固定的.
在前乙個專案中, 我用的就是tortoisesvn的這種方式來自動生成版本號. 後來我想把它也移植到linux下, 剛開始時遇到了問題, 就改用python + pysvn 來實現這個功能. 以下是**:
makeversion.py 是實現**
#--*-- coding:cp936 --*--
"""@file: makeversion.py
自動生成版本號
@attention: 需要安裝pysvn模組
"""import
pysvn
import
sysimport
osimport
time
from
string
import
template
import
traceback
import
versionconf
versiontext
="""
#define filever $,$,$,$
#define productver $,$,$,$
#define strfilever "$, $, $, $/0"
#define strproductver "$, $, $, $/0"
#define vermajor $
#define verminor $
#define vermicro $
#define verbuild $
#define buildnumber "$.$.$, build $"
#define verdate "$"
#define buildtime $
"""if
__name__=="
__main__":
iflen(sys.argv) ==2
:svnrepospath
=sys.argv[1]
else
: svnrepospath
=os.getcwd() ;
try:
majorversion
=versionconf.majorversion
minorversion
=versionconf.minorversion
microversion
=versionconf.microversion
client
=pysvn.client()
loglist
=client.log(svnrepospath, limit=1
)reposinfo
=loglist[0]
reposrevnumber
=reposinfo.revision.number
reposcomittime
=time.strftime(
"%y/%m/%d %h:%m:%s
", time.localtime(reposinfo.date)) ;
buildtime ="
""+time.strftime(
"%y/%m/%d %h:%m:%s
", time.localtime()) +"
"";try
:os.remove(
"version.h
") ;
except
: pass
try:
fread
=open(
"versionformat.txt",
"r") ;
versiontext =""
;line
=fread.readline()
while
line:
versiontext
+=line ;
line
=fread.readline()
fread.close() ;
except
:pass
versionvalue
=versionvalue.update()t =
template(versiontext)
fwrite
=open(
"version.h",
"w")
fwrite.write(t.safe_substitute(versionvalue))
fwrite.close() ;
"成功生成版本號
"except
:traceback.print_exc(file
=sys.stdout)
"無法生成版本號
"os.system(
"pause")
versionconf.py 是配置檔案:
#--*-- coding:cp936 --*--
majorversion ="
1"minorversion ="
2"microversion ="
0"還可以有versionformat.txt, 這個用來描述version.h的格式, 如果沒有, 就採用預設格式生成version.h
#define filever $,$,$,$用法: 把這幾個檔案放到svn**庫的乙個工作拷貝下, 直接執行;#define productver $,$,$,$
#define strfilever "$, $, $, $/0"
#define strproductver "$, $, $, $/0"
#define vermajor $
#define verminor $
#define vermicro $
#define verbuild $
#define buildnumber "$.$.$, build $"
#define verdate "$"
#define buildtime $
或 python makeversion.py path, makeversion.py 後可以加乙個路徑
MDK自動生成版本號
mdk編譯工程時自動生成乙個檔案版本號,格式為 v x.x.x build 2021 01 13 11 08 41 by 計算機名 我的操作希望對讀到的小夥伴有幫助!檔案結構是這樣的 test svn mdk proj test.uvprojx getversionnumber svnreion.b...
Vsiual Studio自動生成版本號的一種方法
1 安裝nuget包msbuildtasks 2 編輯專案的csproj檔案,找到被注釋掉的target的beforebuild,去掉注釋,新增如下 如下。3 編譯專案一次就會在專案資料夾下生成 propertiesversion.txt 4 在assemblyinfo.cs檔案中包含了assemb...
android打包自動生成版本號
版本控制比較普遍的 3 種命名格式 1 gnu 風格版本號 主版本號 子版本號 修正版本號 build 編譯版本號 示例 1.0.0 build 1234 2 windows 風格版本號 主版本號 子版本號 修正版本號 編譯版本號 示例 1.0.0.1234 3 net framework 風格版本...