发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
在实际项目中(特别是作为产品的项目),版本号是必不可少的一部分。版本号的规则也有许多种,在此不讨论具体的编码规范。对于迭代的产品,版本繁多,特别是有多个实施项目所使用产品的版本不同(基于定制需求)时,清楚的标识组件与代码对于的关系十分重要。
本文主要说明如何在 .Net 项目使用 SVN 作为版本控制工具时生成与代码对应的组件版本号。
我们知道,SVN 在 commit 时会生成一个4位数字的序号,所以基本思路是把这个序号作为 . Net 项目编译后生成dll的文件版本号的最后一段。下面所列方法需要使用到TortoiseSVN 提供的 SubWCRev.exe 。
首先,我们需要通过注册表查找 TortoiseSVN 的安装目录。
1 Rem Search TSVN Path 2 For /f "tokens=*" %%i In ('Reg Query HKLM\Software\TortoiseSVN /v Directory') Do ( 3 ECHO %%i | Find "Directory">NUL 4 IF %ERRORLEVEL% == 0 (For /f "tokens=1,2,*" %%j In ("%%i") Do (SET TSVN_PATH=%%1)) 5 ) 6 SET TSVN_PATH=%TSVN_PATH%bin\SubWCRev.exe
SubWCRev 是通过替换文件中指定的关键字来实现获得 commit 序号的,点击查看详细的列表。
然后我们建立以一个 AssemblyInfo.tpl 作为替换使用的模板,由于 AssemblyInfo.cs 中除了固定的值外还有类似 GUID 变化的值,所以我们不能全部替换,因此仅将需要修改的部分放在 tpl 中,内容如下:
[assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.$WCREV$")]
接下来使用批处理替换原来的 AssemblyInfo.cs 文件,为了在每次编译时都自动替换,我们把调用批处理的命令卸载项目生成事件的生成前事件中,例如下面这样:
"$(TargetDir)BeforeBuildProject.bat" "$(ProjectDir)" "$(TargetDir)AssemblyInfo.tpl" .\Properties\AssemblyInfo.cs
$(TargetDir)表示编译输出目录,更多可用全局变量请在生成事件中点击“宏”查看。
替换 AssemblyInfo.cs 的批处理代码:
1 SET WorkDir=%1 2 SET Template=%2 3 SET target=%3 4 SET AssemblyInfo=ASSEMBLY_INFO.tmp 5 6 PushD %WorkDir% 7 SET WorkDir=. 8 9 Rem Generate a template file 10 FindStr /v "AssemblyVersion AssemblyFileVersion" %target% > %AssemblyInfo% 11 FindStr ".*" %Template% >> %AssemblyInfo% 12 13 Rem Using TSVN Replace Tlp 14 "%TSVN_PATH%" %WorkDir% %AssemblyInfo% %target%>NUL
当然这样还不是一劳永逸,你会发现每次编译 AssemblyInfo.cs 文件都会变化,因此你的 commit 序号也要一直跟着增加,这并不是我们所想要的效果。这里提出一种解决方案,在每次替换后生成 dll 后又将 AssemblyInfo.cs 还原回去。
为此,我们在生成前事件中增加备份命令:
COPY /y "%target%" "%target%.bak">NUL
然后增加生成后事件,调用命令为:
"$(TargetDir)AfterBuildProject.bat" "$(ProjectDir)Properties\AssemblyInfo.cs"
在 AfterBuildProject.bat 中我们需要完成还原 AssemblyInfo.cs 和删除备份文件的工作,代码如下:
1 SET target=%1 2 COPY "%target%.bak" %target% 3 DEL /Q "%target%.bak" 2>NUL
就此,每次编译时,系统都会自动将 commit 序号放到 dll 的文件版本中了。
完整代码下载:点击下载
本文来自 NewIdea 的博客,作者 ziyunhx 。
原文地址:http://www.cnblogs.com/NewIdea/p/AutoVersion.html
转载请注明出处,否则拒绝转载!
来自: 昵称10504424 > 《工作》
0条评论
发表
请遵守用户 评论公约
VS中实时获取SVN的版本号并写入到AssemblyInfo.cs中(C#)
VS中实时获取SVN的版本号并写入到AssemblyInfo.cs中(C#)1.将项目中Properties中的AssemblyInfo.cs文件复制一份,命名为AssemblyInfo.tem...
从SVN导出指定版本号之间修改的文件
从SVN导出指定版本号之间修改的文件。当一个网站项目进入运营维护阶段以后,不会再频繁地更新全部源文件到服务器,这个时间的修改大多是...
eclipse 的导入的svn项目只显示版本号不显示作者和更新时间
eclipse 的导入的svn项目只显示版本号不显示作者和更新时间原创 eclipse 的导入的svn项目只显示版本号不显示作者和更新时间 2018-03-...
SVN Error: No such revision X
Error: No such revision
ubuntu上面svn用merge合并到之前的版本
ubuntu上面svn用merge合并到之前的版本 第一步:切换到svn项目的目录 第二步:更新到最新用 svn update? 第三步:查看我们当前svn的版本号 svn info ?第四步:查看我们每次记录的日志信息得到版本号...
SVN简介:enjoy时光机
SVN简介:enjoy时光机。我是SVN初级玩家,只是结合SVN官方的文档以及网上的一点资料写的这个文档,目的是通过实际例子方便大家迅速掌握S...
SVN的基本使用
2. 常用命令- cd path : 将当前路径切换到path路径- pwd :查看当前所在路径- ls (-a / -l / -G) : 查看当前文件夹下所有文件及文件夹- touch filename1 filename2 : 创建一个或者多个文件 - rm file...
使用SVN进行项目版本管理
使用SVN进行项目版本管理。本文描述了利用SVN进行项目版本管理的方法,涉及项目版本号命名规则、SVN目录结构、第三方代码库的管理、版本...
Subversion客户端使用详解
Subversion客户端使用详解。一旦我们改变了文件夹下边的某个文件时,TortoiseSVN将文件的标志换成感叹号的标记,此时如果我们希望将变更的文件提交到版本库中时,只需在文件上点击右键,选择"SVN ...
微信扫码,在手机上查看选中内容