原创 程序集版本最后一位使用SVN版本号的自动生成方法

2007-12-7 14:29 4235 16 16 分类: 汽车电子
     使用SVN进行源代码版本控制时,我们希望能够快速找到每个发布版本对应的源代码版本,现在可以通过在程序集的版本信息中增加SVN源码版本信息的方式来实现我们的要求。

      现在我们定义每个程序集的版本信息的最末段表示SVN的源码版本。详细定义如下:

程序集版本号分为4段,例如1.0.4.23。



  1. 第一段为主版本号,项目一但启动则不会更改。
  2. 第二段为次版本号,在项目功能做较大调整时增加,增量为1。
  3. 第三段为修订版本号,通常在解决缺陷或者细微功能变化时增加,增量为1或者2。该版本号分奇数和偶数两种。奇数表示测试版本,偶数表示稳定版本。
  4. 第四段为SVN源码版本号,该版本号通过脚本自动生成。

     使用脚本自动生成SVN版本号的先决条件:


  1. 安装TortoiseSVN;
  2. 源代码在SVN版本管理控制之下。

    修改项目设置,使之能够自动生成版本号:


  • 修改Properties\AssemblyInfo.cs文件,将程序集版本信息的最末一段改为$WCREV$。并增加一行"//最后发布时间:$WCDATE$"



例如:

[assembly: AssemblyVersion("1.1.0.$WCREV$")]

[assembly: AssemblyFileVersion("1.1.0.$WCREV$")]

//最后发布时间:$WCDATE$



  • 将AssemblyInfo.cs文件重名为AssemblyInfo.tpl,并添加到源代码管理。
  • 从源代码仓库中删除AssemblyInfo.cs,并排除它,使其不受版本管理
  • 添加本文中的GenerateAssemblyInfo.bat文件到Properties目录中,并添加到源代码管理。
  • 修改项目属性,在生成事件预生成事件命令行中添加以下命令。

"$(ProjectDir)\Properties\GenerateAssemblyInfo.bat" "$(ProjectDir)" .\Properties\AssemblyInfo.tpl .\Properties\AssemblyInfo.cs

     注意


  • 编译之前记得提交你的更改和更新别人的更改,这样才能确保版本号的正确。
  • 今后要对程序集信息进行修改时,请对AssemblyInfo.tpl文件进行修改。
  • 如果生成的AssemblyInfo.cs文件出现中文乱码,打开AssemblyInfo.tpl,在文件->高级保存选项中将文件编码改为UTF-8即可。



     脚本


GenerateAssemblyInfo.bat

::-----------------------------

::** Initialize

@ECHO OFF

SETLOCAL ENABLEEXTENSIONS



REM Initialize Constants

SET TSVN_INFO_FILE
=.\TSVN_INFO.tmp



REM Initialize script arguments



SET workDir
=%1

SET template
=%2

SET target
=%3



REM Goto main entry

GOTO MAIN

::
=============================





::-----------------------------

::** Main entry

:MAIN

pushd %workDir%

SET workDir
=.\



REM 检查参数

IF %workDir%
=="" GOTO ARGUMENT_ERROR

IF %template%
=="" GOTO ARGUMENT_ERROR

IF %target%
=="" GOTO ARGUMENT_ERROR



REM 查询注册表

reg query HKLM\SOFTWARE\TortoiseSVN /v Directory > %TSVN_INFO_FILE% 
2>NUL



REM 查找 TSVN 路径

FOR /F 
"tokens=*" %%i IN (%TSVN_INFO_FILE%) DO (

  ECHO %%i | find 
"Directory" > NUL

  IF %ERRORLEVEL% 
== 0 (

    ECHO %%i > %TSVN_INFO_FILE%

  )

)



SET /P TSVN_PATH
= < %TSVN_INFO_FILE%

SET TSVN_PATH
=%TSVN_PATH:~17,-1%



REM 调用 TSVN 替换模板

IF NOT %ERRORLEVEL% 
== 0 GOTO UNKNOW_ERROR

"%TSVN_PATH%bin\SubWCRev.exe" %workDir% %template% %target% >NUL



IF NOT %ERRORLEVEL% 
== 0 GOTO UNKNOW_ERROR

GOTO SUCESSED

::
=============================





::-----------------------------

::** Error handlers



:ARGUMENT_ERROR

ECHO 传入的参数无效。

GOTO FAIL



:NOT_FOUND_TSVN

ECHO 查询TortoiseSVN 的安装信息失败。

GOTO FAIL



:UNKNOW_ERROR

ECHO 生成程序集信息出现未知错误。

:FAIL

::
=============================



::-----------------------------

::** Program exit

:FAIL

DEL /Q %TSVN_INFO_FILE% 
2>NUL

ECHO 生成程序集信息失败。

popd

EXIT 
1



:SUCESSED

DEL /Q %TSVN_INFO_FILE% 
2>NUL

ECHO 生成程序集信息成功。

popd

EXIT 
0

::
=============================


 


      参考资料 Zealic 的 通过 TSVN 自动更新程序集版本信息 

 


986766.html

浮云 2007-12-07 14:29 发表评论
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
16
关闭 站长推荐上一条 /3 下一条