上一篇博客写了如何在 .Net 项目使用 SVN 作为版本控制工具时生成与代码对应的组件版本号。虽然在公司一直使用 SVN ,但我却对 GIT 情有独钟(可能要归功于那段捣鼓 ROM 的时光),但少有文章提及如何具体在 Windows 平台来获得版本号。这让我有了迫切得到方法的希望。
上篇博客《在VS项目中使用SVN版本号作为编译版本号》
经过测试,该方法是可行的,以前验证失败的原因主要是打开了 AssemblyInfo.cs 文件,造成占用不可替换!
本文提供的方法还不完善,写出来的目的是为了得到更多人的关注,也希望有大牛能指点一二。
将 GIT 的 commit 作为 . Net 项目编译后生成dll的文件版本号主要有以下几个困难。
1,GIT 没有一个数字的序号,而是一个SHA散列码;
2,GIT 提供的命令在 linux 十分方便,在 Windows 下需要额外的工具。
第一个问题好解决,我们取当前文件夹 commit 的次数加上截取一段 SHA 码就可以作为文件版本号的最后一位。第二个问题目前想到的方法是调用 msysgit 提供的 Git Bash 来执行命令。
好了,首先我们依旧得找到 msysgit 的安装目录,一查之下头就大了,各个地方的路径都感觉不靠谱,最后还是选用了
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Git_is1的InstallLocation
(本来是想通过 temp 环境变量来取值的,查看 GIT 源代码好像也有写入,后来在自己电脑里却找不到)
注:经验证,与安装选项有关,如果希望简单的话在安装时选择一下可以省很多事情!
然后参照 Git Bash 的快捷方式拼接了下 call 的语句。
然后写了一个 sh 文件来获得版本号,并保存到文件:
1 # file name: git_ver.sh 2 #!/bin/bash 3 VER_FILE=git_version.tmp 4 LOCALVER=`git rev-list HEAD | wc -l | awk '{print $1}'` 5 VER=r$LOCALVER 6 VER="$VER $(git rev-list HEAD -n 1 | cut -c 1-7)" 7 GIT_VERSION=$VER 8 echo $GIT_VERSION>$VER_FILE