vs自动获取svn版本

因为公司项目版本一直没有管控起来,遇到过很多麻烦,最近想做到自己动生成版本,查找资料后遇到一点小问题,感觉有点地方没有解释的很清楚,所以稍微修改原作者文章,方便自己之后查看

原理
SVN中的可执行文件SubWCRev.exe,该文件可以查看工作目录的当前svn号并且保存在变量$WCREV$中。因此,可以先写一个批处理,然后在项目的预生成命令中执行该批处理文件。

VS编译时自动化生成版本示例:
在需要添加版本的工程目录下新建文件夹(以Setup为例), 在svn 客户端的安装目录下找到Subwcrev.exe并复制到Setup文件夹下(Subwcrev.exe 可执行文件通常在 svn 客户端的安装目录下,比如TortoiseSVN 是在其安装目录的bin文件夹下),另外新建批处理文件GenerateRevision.bat和 新建生成版本模板文件version_template.h,目录如下图。 
vs自动获取svn版本

SubWCRev.exe用法,这个用法写在GenerateRevision.bat里
#SubWCRev.exe WorkingCopyPath Template DestFile参数说明: WorkingCopyPath:要SVN查看的工作目录路径,取解决方案目录,SVN取这个目录的版本号 Template:模版文件,版本号按这个文件的格式生成,在本案例中指version_template.h DestFile:生成的文件存放的目录,把这个生成的文件放到哪里


GenerateRevision.bat
格式:#SubWCRev.exe WorkingCopyPath Template DestFile
"SubWCRev.exe""%~dp0..""%~dp0version_template.h""%~dp0../XX/version.h"%1


1. %~dp0 标识当前目录
2.%1 当前输入的第一个参数


version_template.h
#define FILEVER 1,0,0,$WCREV$#define PRODUCTVER 1,0,0,$WCREV$#define STR_FILEVER "1,0,0,$WCREV$"#define STR_PRODUCTVER "1,0,0,$WCREV$"

注意version_template.h的最后要加一个换行符,不然编译时会以下错误,原因是version.h末尾缺少换行符 
vs自动获取svn版本
现在双击GenerateRevision.bat生成目标文件,在“XX”目录下就可以找到生成的version.h 文件了,但目录必须存在!
vs自动获取svn版本

写到这里自动生成版本号的就完成了,那么我们需要在项目每次生成的时候都自动读取版本号,就需要用到vs的预编译功能了。直接引入GenerateRevision.bat就行了。
vs自动获取svn版本
不过我这边不知道什么原因引入不成功,重新写的dos命令,"$(ProjectDir)Setup\subwcrev.exe" "$(ProjectDir).." "$(ProjectDir)Setup\version_template.h" "$(ProjectDir)Version/version.h" %1 其实与bat里写的一样。


这样项目里就可以调用version.h里的版本号了