自从有了版本控制,Coder 似乎就多了一剂后悔药,让人爽的不行。有时我们会需要在程序中嵌入程序的编译信息,比如,版本修订号、编译日期等,这些对于发行程序和黑盒测试都是很有用的,可以让我们快速定位到数个发行版中的准确版本或者BUG所在。
  这里就是介绍如何"自动"同步SVN和程序集的版本信息,Coding 的目的就是让 Coder 更懒。
  要完成这个工作,首先要安装 TortoiseSVN及 Subversion,并让你的项目处于 SVN 的版本控制之下。
  P.S : 这里推荐 TortoiseSVN 和 AnkhSVN 一起管理项目,TortoiseSVN 做常见任务,AnkhSVN 主要用于在IDE中跟踪状态。
  
  首先,我们需要 SubWCRev.exe,这是由 TortoiseSVN 提供的实用工具,可以获取工作拷贝或版本库的一些信息并通过模板替换。
  这里我写了一个类似于函数的 AutoRevision.bat 脚本来直接简化我们的工作。
   
AutoRevision.bat :
通过 TSVN 自动更新程序集版本信息::<code>
通过 TSVN 自动更新程序集版本信息::  
<revsion>$Rev: 4 $</revision>
通过 TSVN 自动更新程序集版本信息::  
<owner name="Zealic" mail="rszealic@gmail.com" />
通过 TSVN 自动更新程序集版本信息::
</code>
通过 TSVN 自动更新程序集版本信息::
-----------------------------
通过 TSVN 自动更新程序集版本信息::
<summary>
通过 TSVN 自动更新程序集版本信息::  根据指定的 SVN 工作目录的信息和模板生成目标文件。
通过 TSVN 自动更新程序集版本信息::
</summary>
通过 TSVN 自动更新程序集版本信息::
<param name="workDir">要获取信息的 SVN 工作目录。</param>
通过 TSVN 自动更新程序集版本信息::
<param name="template">模板文件路径。</param>
通过 TSVN 自动更新程序集版本信息::
<param name="target">生成的目标文件路径。</param>
通过 TSVN 自动更新程序集版本信息::
<returns>装载量</returns>
通过 TSVN 自动更新程序集版本信息::
<remark>
通过 TSVN 自动更新程序集版本信息::   当生成项目时 Visual Studio 如果已经打开 
%target% 参数指向的文件,那么可能导致模板替换更新不精确。
通过 TSVN 自动更新程序集版本信息:: 导致该问题的原因是:SubWCRev.exe 修改了 
%target%,但是 VS 检测到了这一情况,会弹出对话框询问用户。
通过 TSVN 自动更新程序集版本信息:: 必须重新加载才可以,否则 VS 将会编译未替换过的 
%target% 文件。
通过 TSVN 自动更新程序集版本信息::
</remark>
通过 TSVN 自动更新程序集版本信息::
=============================
通过 TSVN 自动更新程序集版本信息
通过 TSVN 自动更新程序集版本信息
通过 TSVN 自动更新程序集版本信息::
-----------------------------
通过 TSVN 自动更新程序集版本信息::
** Initialize
通过 TSVN 自动更新程序集版本信息@ECHO OFF
通过 TSVN 自动更新程序集版本信息SETLOCAL ENABLEEXTENSIONS
通过 TSVN 自动更新程序集版本信息REM Initialize Constants
通过 TSVN 自动更新程序集版本信息SET TSVN_INFO_FILE
=.\TSVN_INFO.tmp
通过 TSVN 自动更新程序集版本信息REM Initialize script arguments
通过 TSVN 自动更新程序集版本信息SET workDir
=%1
通过 TSVN 自动更新程序集版本信息SET template
=%2
通过 TSVN 自动更新程序集版本信息SET target
=%3
通过 TSVN 自动更新程序集版本信息
通过 TSVN 自动更新程序集版本信息REM Goto main entry
通过 TSVN 自动更新程序集版本信息GOTO MAIN
通过 TSVN 自动更新程序集版本信息::
=============================
通过 TSVN 自动更新程序集版本信息
通过 TSVN 自动更新程序集版本信息
通过 TSVN 自动更新程序集版本信息::
-----------------------------
通过 TSVN 自动更新程序集版本信息::
** Main entry
通过 TSVN 自动更新程序集版本信息:MAIN
通过 TSVN 自动更新程序集版本信息pushd 
%workDir%
通过 TSVN 自动更新程序集版本信息SET workDir
=.\
通过 TSVN 自动更新程序集版本信息
通过 TSVN 自动更新程序集版本信息REM 检查参数
通过 TSVN 自动更新程序集版本信息IF 
%workDir%=="" GOTO ARGUMENT_ERROR
通过 TSVN 自动更新程序集版本信息IF 
%template%=="" GOTO ARGUMENT_ERROR
通过 TSVN 自动更新程序集版本信息IF 
%target%=="" GOTO ARGUMENT_ERROR
通过 TSVN 自动更新程序集版本信息
通过 TSVN 自动更新程序集版本信息REM 查询注册表
通过 TSVN 自动更新程序集版本信息reg query HKLM\SOFTWARE\TortoiseSVN 
/v Directory > %TSVN_INFO_FILE% 2>NUL
通过 TSVN 自动更新程序集版本信息
通过 TSVN 自动更新程序集版本信息REM 查找 TSVN 路径
通过 TSVN 自动更新程序集版本信息FOR 
/"tokens=*" %%i IN (%TSVN_INFO_FILE%) DO (
通过 TSVN 自动更新程序集版本信息  ECHO 
%%| find "Directory    REG_SZ" > NUL
通过 TSVN 自动更新程序集版本信息  IF 
%ERRORLEVEL% == 0 (
通过 TSVN 自动更新程序集版本信息    ECHO 
%%> %TSVN_INFO_FILE%
通过 TSVN 自动更新程序集版本信息  )
通过 TSVN 自动更新程序集版本信息)
通过 TSVN 自动更新程序集版本信息SET 
/P TSVN_PATH= < %TSVN_INFO_FILE%
通过 TSVN 自动更新程序集版本信息SET TSVN_PATH
=%TSVN_PATH:~23,-1%
通过 TSVN 自动更新程序集版本信息
通过 TSVN 自动更新程序集版本信息REM 调用 TSVN 替换模板
通过 TSVN 自动更新程序集版本信息IF NOT 
%ERRORLEVEL% == 0 GOTO UNKNOW_ERROR
通过 TSVN 自动更新程序集版本信息
"%TSVN_PATH%bin\SubWCRev.exe" %workDir% %template% %target%
通过 TSVN 自动更新程序集版本信息IF NOT 
%ERRORLEVEL% == 0 GOTO UNKNOW_ERROR
通过 TSVN 自动更新程序集版本信息GOTO SUCESSED
通过 TSVN 自动更新程序集版本信息::
=============================
通过 TSVN 自动更新程序集版本信息
通过 TSVN 自动更新程序集版本信息
通过 TSVN 自动更新程序集版本信息::
-----------------------------
通过 TSVN 自动更新程序集版本信息::
** Error handlers
通过 TSVN 自动更新程序集版本信息
通过 TSVN 自动更新程序集版本信息:ARGUMENT_ERROR
通过 TSVN 自动更新程序集版本信息ECHO 传入的参数无效。
通过 TSVN 自动更新程序集版本信息GOTO FAIL
通过 TSVN 自动更新程序集版本信息
通过 TSVN 自动更新程序集版本信息:NOT_FOUND_TSVN
通过 TSVN 自动更新程序集版本信息ECHO 查询TortoiseSVN 的安装信息失败。
通过 TSVN 自动更新程序集版本信息GOTO FAIL
通过 TSVN 自动更新程序集版本信息
通过 TSVN 自动更新程序集版本信息:UNKNOW_ERROR
通过 TSVN 自动更新程序集版本信息ECHO 未知错误。
通过 TSVN 自动更新程序集版本信息:FAIL
通过 TSVN 自动更新程序集版本信息::
=============================
通过 TSVN 自动更新程序集版本信息
通过 TSVN 自动更新程序集版本信息::
-----------------------------
通过 TSVN 自动更新程序集版本信息::
** Program exit
通过 TSVN 自动更新程序集版本信息:FAIL
通过 TSVN 自动更新程序集版本信息DEL 
/%TSVN_INFO_FILE% 2>NUL
通过 TSVN 自动更新程序集版本信息ECHO 模板替换失败。
通过 TSVN 自动更新程序集版本信息popd
通过 TSVN 自动更新程序集版本信息EXIT 
1
通过 TSVN 自动更新程序集版本信息
通过 TSVN 自动更新程序集版本信息:SUCESSED
通过 TSVN 自动更新程序集版本信息DEL 
/%TSVN_INFO_FILE% 2>NUL
通过 TSVN 自动更新程序集版本信息ECHO 成功进行了模板替换。
通过 TSVN 自动更新程序集版本信息popd
通过 TSVN 自动更新程序集版本信息EXIT 
0
通过 TSVN 自动更新程序集版本信息::
=============================
通过 TSVN 自动更新程序集版本信息

 
然后创建一个供脚本使用的模板 AssemblyInfo.tpl,内容如下:
AssemblyInfo.tpl


  之后为项目添加预生成事件处理命令:
  在 属性->项目生成事件->预生成事件命令行 中键入如下代码 :
通过 TSVN 自动更新程序集版本信息"$(ProjectDir)\Properties\AutoRevision.bat" "$(ProjectDir)" .\Properties\AssemblyInfo.tpl .\Properties\AssemblyInfo.cs


这样,程序就可以在每次编译的时候自动更新程序集信息了,我们可以在 <AssemblyFile>.exe->属性->版本->备注中看到如下信息:

通过 TSVN 自动更新程序集版本信息Name=RevTest
通过 TSVN 自动更新程序集版本信息Build
=DEBUG
通过 TSVN 自动更新程序集版本信息Revision
=4
通过 TSVN 自动更新程序集版本信息RevRange
=4
通过 TSVN 自动更新程序集版本信息RevMixed
=False
通过 TSVN 自动更新程序集版本信息Modified
=False
通过 TSVN 自动更新程序集版本信息
通过 TSVN 自动更新程序集版本信息
2007/12/05 19:00:35
通过 TSVN 自动更新程序集版本信息


示例工程下载 :  RevTest.rar

相关文章:

  • 2022-01-01
  • 2021-12-04
  • 2022-12-23
  • 2021-07-07
  • 2022-12-23
  • 2022-12-23
  • 2022-01-19
猜你喜欢
  • 2022-02-08
  • 2022-12-23
  • 2021-05-21
  • 2021-12-04
  • 2021-12-04
  • 2022-02-08
相关资源
相似解决方案