关于subwcrev.exe参见:
http://tortoisesvn.net/docs/nightly/TortoiseSVN_zh_CN/tsvn-subwcrev.html
http://tortoisesvn.net/docs/nightly/TortoiseSVN_zh_CN/tsvn-subwcrev-keywords.html
基本格式是:
SubWCRev WorkingCopyPath [SrcVersionFile DstVersionFile] [-nmdfe]
所以需要在VS对应的工程中新建两个文件,一个是SrcVersionFile和DstVersionFile,其中:
1.WorkingCopyPath工程所在的目录
2.SrcVersionFile含有SubWCRev.exe程序可以替换的宏;
3.DstVersionFile为更新svn之后把宏替换掉以后的目标文件。
例如:
SrcVersionFile为一个头文件,名字叫Template.Source.Version.h,其内容如下:
#pragma once
#define VER_UMS_HQ_MAJOR 2
#define VER_UMS_HQ_MINOR 2
#define VER_UMS_HQ_SVN $WCREV$
#define VER_UMS_HQ_REVISION "2.2.$WCREV$.0"
DstVersionFile文件为另外一个头文件,名字叫Source.Version.h,其内容如下:
#pragma once
#define VER_UMS_HQ_MAJOR 2
#define VER_UMS_HQ_MINOR 2
#define VER_UMS_HQ_SVN 8465
#define VER_UMS_HQ_REVISION "2.2.8465.0"
然后在工程属性设置:
Build Event选项->Pre-Build Event的Command Line中输入:
subwcrev.exe “./” “./Template.Source.Version.h” “./Source.Version.h”
这样每次用svn更新代码时,svn的项目版本号也更新下来了,并最重替换掉 Template.Source.Version.h中宏 WCREV ,生成Source.Version.h中的内容。最后在其它文件中就可以使用这个VER_UMS_HQ_REVISION的定义了,例如在程序版本号中使用:
VS_VERSION_INFO VERSIONINFO
FILEVERSION VER_UMS_HQ_MAJOR,VER_UMS_HQ_MINOR,VER_UMS_HQ_SVN,0
PRODUCTVERSION VER_UMS_HQ_MAJOR,VER_UMS_HQ_MINOR,VER_UMS_HQ_SVN,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x2L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904e4"
BEGIN
VALUE "CompanyName", "Zealink.Com"
VALUE "FileDescription", "Zealink.UMSHQ"
VALUE "FileVersion", VER_UMS_HQ_REVISION
VALUE "InternalName", "Zealink.UMS.HQ.dll"
VALUE "LegalCopyright", "Zealink.Com All rights reserved."
VALUE "OriginalFilename", "Zealink.UMS.HQ.dll"
VALUE "ProductName", "UMS"
VALUE "ProductVersion", VER_UMS_HQ_REVISION
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1252
END
END