工具——基于SVN自动生成版本号的方法

基于SVN自动生成版本号的方法

程序集版本最后一位使用SVN版本号的自动生成方法,这里简单介绍一下,一起学习SVN版本号的相关知识。
使用SVN进行源代码版本控制时,我们希望能够快速找到每个发布版本对应的源代码版本,现在可以通过在程序集的版本信息中增加SVN源码版本信息的方式来实现我们的要求。

1. 生成一个名为autover的项目
    注意项目的Properties文件夹下有一个名为AssemblyInfo.cs的文件,autover程序的版本号就写在它里面。

2. 创建模板文件
    在windows的资源管理器中进入Properties文件夹,把AssemblyInfo.cs文件复制一份,命名为AssemblyInfo.template.cs,并把它加入到项目中来。

3. 修改AssemblyInfo.template.cs的属性
    AssemblyInfo.template.cs文件是用来自动生成版本号的模板文件,它不应该被编译,所以我们要把它的Build Action改成None:

4. 修改AssemblyInfo.template.cs的内容
    在这个文件中,你能找到如下两行代码: 
        [assembly: AssemblyVersion( "1.0.0.0" )] 
        [assembly: AssemblyFileVersion( "1.0.0.0" )] 
其中的“1.0.0.0”就是程序的版本号,它使用的是“主版本号.次版本号.内部版本号.修订号”的形式。前三个改成你自己需要的数字,最后一个改成“$WCREV$”,改完之后应该是类似下面的样子: 
        [assembly: AssemblyVersion( "1.0.0.$WCREV$" )] 
        [assembly: AssemblyFileVersion( "1.0.0.$WCREV$" )]
    在这个文件的最后,你还应该加上下面两段代码,它们可以检测出有本地修改(修改了但没有提交)的代码和有混合版本的代码。 
        #if $WCMIXED?true:false$ 
        #if DEBUG 
        #warning mixed update revisions founded 
        #else 
        #error mixed update revisions founded 
        #endif 
        #endif 

        #if $WCMODS?true:false$ 
        #if DEBUG 
        #warning local modification founded 
        #else 
        #error local modification founded 
        #endif 
        #endif

5. 修改项目属性
    在项目属性的Build Event页的Pre-build event command line中输入: 
        "%ProgramFiles%/TortoiseSVN/bin/SubWCRev.exe" $(SolutionDir) $(ProjectDir)Properties/AssemblyInfo.template.cs $(ProjectDir)Properties/AssemblyInfo.cs -f 
    注意,这里我们必须保证TortoiseSVN安装到了默认路径上。在多人参加的项目中这应该是强制性的要求,否则,大家安装的路径都不一样,甲机器上能用的配置,到了乙机器上可能就不行了。
    然后,你可能还需要将Publish页中的Automatically increment revision with each publish选项关掉(我不确定这步是否必须)。C#可以自己递增版本号,但它生成的版本号和代码库中的代码没有对应关系,我个人觉得意义不大。并且它 还可能会把我们的版本自增机制搞乱。所以应该关掉。

6. 把项目加入版本库
    使用VisualSVN的Add solution to Subversion命令把项目加入SVN,但不要提交。

7. 从SVN中排除AssemblyInfo.cs文件
    每次编译时,这个文件都会基于AssemblyInfo.template.cs重新生成,所以没必要加入版本库。这步做完之后就可以提交整个项目了。

8. 编译
    编译完成后,看一下生成的autover.exe文件的版本信息,本例中是1.0.0.1。随便改点什么,提交,重新编译,你会发现它自动 变成了1.0.0.2,也就是程序的修订号总是与生成它的代码的修订号一致。这样,当程序出问题后,我们通过这个数字就能轻松得到生成它的那一版代码了。

9. 其它问题
    第8步中大家做完修改后再编译时可能会看到警告或错误信息,说代码有本地修改或混合版本。这就是第4步中,在 AssemblyInfo.template.cs文件最后加的两段代码的作用,它们检测代码是否都已经提交了并且版本是否一致,一旦发现问题就会在调试 版中生成警告信息,在发布版中生成错误信息。使用这种方法,我们可以基本消除发布的程序的版本和代码的版本出现不一致的可能性。去掉这两个错误或警告的方 法也很简单,把代码整体提交或更新一下就行了。



现在我们定义每个程序集的版本信息的最末段表示SVN的源码版本。详细定义如下:
程序集版本号分为4段,例如1.0.4.23。
    第一段为主版本号,项目一但启动则不会更改。
    第二段为次版本号,在项目功能做较大调整时增加,增量为1。
    第三段为修订版本号,通常在解决缺陷或者细微功能变化时增加,增量为1或者2。该版本号分奇数和偶数两种。奇数表示测试版本,偶数表示稳定版本。
    第四段为SVN源码版本号,该版本号通过脚本自动生成。

使用脚本自动生成SVN版本号的先决条件:
    安装TortoiseSVN;
    源代码在SVN版本管理控制之下。

修改项目设置,使之能够自动生成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即可。


  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于使用 SVN(Subversion)版本管理工具方法,你可以按照以下步骤进行操作: 1. 安装 SVN:首先,你需要安装 SVN 客户端工具。可以从 Subversion 官方网站上下载并安装适合你操作系统的版本。 2. 创建版本库:在本地或者服务器上创建一个版本库(Repository),可以使用 `svnadmin create` 命令来创建一个空的版本库。 3. 检出代码:使用 `svn checkout` 命令将版本库中的代码检出到本地工作副本(Working Copy)。例如: ``` svn checkout https://svn.example.com/svn/myproject ``` 4. 添加文件:将要提交的文件或目录添加到版本控制中。使用 `svn add` 命令来添加文件,例如: ``` svn add myfile.txt ``` 5. 提交更改:使用 `svn commit` 命令将本地工作副本中的更改提交到版本库中。例如: ``` svn commit -m "Added myfile.txt" ``` 6. 更新代码:使用 `svn update` 命令从版本库中获取最新的代码更新到本地工作副本中。例如: ``` svn update ``` 7. 比较和合并:使用 `svn diff` 命令查看本地工作副本与版本库之间的差异,并使用 `svn merge` 命令将不同副本之间的更改合并到一起。 8. 分支与标签:可以使用 `svn copy` 命令创建分支或标签,例如: ``` svn copy https://svn.example.com/svn/myproject/trunk https://svn.example.com/svn/myproject/branches/mybranch ``` 这些是 SVN 常用的基本操作方法,可以帮助你开始使用 SVN 进行版本管理。当然,还有其他更高级的功能和命令,你可以查阅 SVN 官方文档或其他教程来进一步学习和了解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值