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的版本号[转载]的更多相关文章

  1. VS中实时获取SVN的版本号并写入到AssemblyInfo.cs中

    在开发项目时,需要知道当前发布的到底是哪个版本,比较好的方式就是获取SVN的版本来作为项目的版本.项目版本一般由主版本.次版本.内部版本.修改版本四个部分组成,我们获取的SVN版本就作为修改版本即可. ...

  2. VS中实时获取SVN的版本号并写入到AssemblyInfo.cs中(C#)

    原文:VS中实时获取SVN的版本号并写入到AssemblyInfo.cs中(C#) 在开发项目时,需要知道当前发布的到底是哪个版本,比较好的方式就是获取SVN的版本来作为项目的版本.项目版本一般由主版 ...

  3. svn ubuntu command(转载)

    转载来自:http://blog.csdn.net/pkueecser/article/details/6830758 将文件checkout到本地目录 svn checkout path(path ...

  4. svn安装【转载】

    SVN简介        SVN全名Subversion,即版本控制系统.SVN与CVS一样,是一个跨平台的软件,支持大多数常见的操作系统.作为一个开源的版本控制系统,Subversion管理着随时间 ...

  5. 如何获得svn的版本号信息?

    方法一  popen(可获取命令行执行后的输出结果) 转载自: C++执行命令行指令并获取命令行执行后的输出结果 1 /* 2 Execute command line commands and ge ...

  6. Gulp自动添加版本号(转载)

    本文转载自: gulp自动添加版本号

  7. 自动获取svn的版本号

    需求 在做打包时,需要获取本地svn仓库的版本号,如下所示: 下面是我试过的几种做法 SubWCRev 使用SubWCRev.exe(TortoiseSVN自带的小工具),用法简单,但获取到的版本号有 ...

  8. QT Creator 使用SVN的版本号做为编译的版本信息

    在使用qt Creator 开发中,如果想使用 svn 的源代码版本号来作为 build 的一个子版本号或者只是为了识别某个发布版本,与源代码的版本信息对应起来,可以方便调试对应的版本代码,我们可以通 ...

  9. ubuntu12.04安装svn 1.7(转载)

    ubuntu12.04安装svn 1.7 分类: ubuntu2013-10-22 16:03 239人阅读 评论(0) 收藏 举报 svnubuntu   目录(?)[+]   1.问题     在 ...

随机推荐

  1. jquery实现图片上传前本地预览功能

    HTML <img id="pic" src="" > <input id="upload" name="fil ...

  2. poj 1068 Parencodings 模拟题

    Description Let S = s1 s2...s2n be a well-formed string of parentheses. S can be encoded in two diff ...

  3. Web墨卡托坐标与WGS84坐标互转

    原文地址:http://bbs.esrichina-bj.cn/ESRI/thread-78245-1-1.html 在WebGIS的开发中经常用到的地图投影为Web墨卡托和WGS84,故歌地图,bi ...

  4. 利用WCF搭建RESTful--纯代码启动

    最近学习了这几年忽略了的当前几乎所有的开发技术,有深有浅,而服务层最有兴趣的是RESTfull,看的是java的书.因为不熟悉JSP,于是找了本书细细研读了一次. dotnet的实现也相对简单,网上也 ...

  5. Linux入门(1)——Ubuntu16.04安装搜狗拼音

    在网址下载搜狗deb包:http://pinyin.sogou.com/linux/ 将下载的sogoupinyin_2.1.0.0082_amd64.deb放在根目录下. 安装搜狗拼音: ltq@l ...

  6. JSP动作元素<jsp:include>和<jsp:param>的搭配使用

    最近开发项目中广告头的优化:引入了<jsp:include page="XX.jsp"></jsp:include> 当<jsp:include> ...

  7. Codeforces Round #536 (Div. 2) B. Lunar New Year and Food Ordering

    #include <bits/stdc++.h> #define N 300010 #define PII pair<int, int> using namespace std ...

  8. 20155326 2016-2017-2 《Java程序设计》第十周学习总结

    20155326 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 计算机网络基础 1.计算机网络概述 网络编程的实质就是两个(或多个)设备(例如计算机)之间的 ...

  9. 初始kafka

    kafka 简介 Kafka是Linkedin于2010年12月份开源的消息系统 一种分布式的.基于发布/订阅的消息系统 ,另外提供数据分布式缓存功能 特点 消息持久化:通过O(1)的磁盘数据结构提供 ...

  10. Java学习--循环语句1

    1. break public class BreakDemo{ // 完成一个四则运算的功能 public static void main(String args[]){ for(int i=0; ...