文档章节

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

o
 osc_4nmshwhm
发布于 2018/08/06 16:11
字数 1791
阅读 16
收藏 0

精选30+云产品,助力企业轻松上云!>>>

$在开发项目时,需要知道当前发布的到底是哪个版本,比较好的方式就是获取SVN的版本来作为项目的版本。项目版本一般由主版本、次版本、内部版本、修改版本四个部分组成,我们获取的SVN版本就作为修改版本即可。这里需要利用SVN的SubWCRev.exe来实现,一般安装了SVN后都会有的。SubWCRev.exe获取SVN版本并依据模板文件,更新到相应的目标文件中。下面是具体的步骤。

1.将项目中Properties中的AssemblyInfo.cs文件复制一份,命名为AssemblyInfo.template.cs,同时将该文件的编译属性设置为无。设置为无是为了不让该文件不参与编译。

同时将[assembly: AssemblyVersion("1.0.0.538")]和[assembly: AssemblyFileVersion("1.0.0.538")]修改为[assembly: AssemblyVersion("1.0.0.$WCREV$")]和[assembly: AssemblyFileVersion("1.0.0.$WCREV$")],如下图

其中$WCREV$是SubWCRev.exe用来匹配然后替换成最新版本号的,必须要这个名字。

2.在项目属性的生成事件中,添加预先生成事件命令,命令内容为SubWCRev $(SolutionDir)   $(ProjectDir)Properties\AssemblyInfo.template.cs  $(ProjectDir)Properties\AssemblyInfo.cs,如下图

3.编译生成后,可以看到AssemblyInfo.cs中的版本号已经变了,如下图

4.代码中取得该版本号并显示,代码如下

 

 this.Text += String.Format("({0})", System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString());
 
结果如下图所示


转载请注明出处

 

 

出处:https://blog.csdn.net/xxdddail/article/details/49280375

=========================================================================

VS中的Properties下的AssemblyInfo.cs可以设置相应的版本号。下面是AssemblyInfo.cs设置版本的方式。

 

  1.  
    [assembly: AssemblyVersion("1.0.0.0")]
  2.  
    [assembly: AssemblyFileVersion("1.0.0.0")]
但是,这个需要每次都设定,而且与SVN上的版本号并不一致,追塑起来不是很方便。所以就想着取SVN上的版本号作为项目的版本号。要得到SVN的版本号,可以在SVN的节眯下,通过SVN的命令svn info来获得信息。这通过CMD命令很容易可以达到,不过,我希望在VS编译时,每次都去获取,所以选择了在VS预生成事件命令中去执行。看下图

预生成事件命令行中输入相应的CMD命令。

1.svn info>svn_info.txt 是执行SVN命令,获取相应的版本信息,然后存到svn_info.txt的文件中。
2.findstr "Revision" svn_info.txt>..\svn_version.dll 从svn_info.txt中查找出版本号,并存到svn_version.dll中。
3.del svn_info.txt 删除svn_info.txt文件。

在编译时将会生成svn_version.dll,需要将该文件添加到项目中,以便能同时发布。这里取名为svn_version.dll,可以找成其他的名字和后缀名。

这样在项目启动时,可以通过读取svn_version.dll中的内容来获取SVN版本号。

 

  1.  
    String version = "1.1.1"
  2.  
    String serverPhysicalPath = Server.MapPath(".");//WEB上,需要将服务路径转换成本地路径。如果是WinForm程序,可以获取程序路径。
  3.  
    if (!serverPhysicalPath.EndsWith("\\"))
  4.  
    {
  5.  
    serverPhysicalPath += "\\";
  6.  
    }
  7.  
    String svnVersionPath = serverPhysicalPath + "svn_version.dll";
  8.  
    StreamReader svnSteamReader = new StreamReader(svnVersionPath);
  9.  
    String line = svnSteamReader.ReadLine();
  10.  
    if (!String.IsNullOrWhiteSpace(line))
  11.  
    {
  12.  
    String[] temps = line.Split(':');
  13.  
    if (temps.Length > 1)
  14.  
    {
  15.  
    version += String.Format(".{0}", temps[1]);
  16.  
    }
  17.  
    }
  18.  
    return version;
以上是将SVN信息存成文件后,再读取来实现的。也可以考虑直接将SVN的版本信息写到AssemblyInfo.cs中,然后再获取。

 

出处:https://blog.csdn.net/xxdddail/article/details/38433759

=========================================================================

在实际项目中(特别是作为产品的项目),版本号是必不可少的一部分。版本号的规则也有许多种,在此不讨论具体的编码规范。对于迭代的产品,版本繁多,特别是有多个实施项目所使用产品的版本不同(基于定制需求)时,清楚的标识组件与代码的对应关系十分重要。

本文主要说明如何在 .Net 项目使用 SVN 作为版本控制工具时生成与代码对应的组件版本号。

我们知道,SVN 在 commit 时会生成一串数字作为序号,所以基本思路是把这个序号作为 . 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
复制代码
View Code

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""(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
复制代码
View Code

 当然这样还不是一劳永逸,你会发现每次编译 AssemblyInfo.cs 文件都会变化,因此你的 commit 序号也会一直跟着增加,这并不是我们所想要的效果。这里提出一种解决方案,在每次替换后生成 dll 后又将 AssemblyInfo.cs 还原回去。

为此,我们在生成前事件中增加备份命令:

COPY /y "%target%" "%target%.bak">NUL

然后增加生成后事件,调用命令为:

"(TargetDir)AfterBuildProject.bat""(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
View Code

就此,每次编译时,系统都会自动将 commit 序号放到 dll 的文件版本中了。

完整代码下载:点击下载

 

本文来自 NewIdea 的博客,作者 Carey Tzou 。

原文地址:http://www.cnblogs.com/NewIdea/p/AutoVersion.html

转载请注明出处,否则拒绝转载!

 

=========================================================================

1、复制版本号文件 AssemblyInfo.cs

2、把复制后的文件改名为 AssemblyInfo.templet.cs 
修改内容: [assembly: AssemblyVersion("1.0.0.$WCREV$")]

3、工程右键->属性->生成事件->预生成事件命令行 输入以下代码:
"C:\Program Files\TortoiseSVN\bin\SubWCRev.exe" $(ProjectDir) $(ProjectDir)Properties\AssemblyInfo.templet.cs $(ProjectDir)Properties\AssemblyInfo.cs -f

 

出处:https://www.cnblogs.com/zouhao/p/3446951.html

=========================================================================

根据上面文章的参考,我们可以根据任何逻辑生成版本号了,在程序编译之前,也就是在VS程序的生成事件中,在编译之前把版本逻辑的信息写到AssemblyInfo文件,然后再编译,其实也就是分两步:

1)调用外部命令(可以是bat或者exe等),生成版本号。

2)把版本号更新到AssemblyInfo文件中

那么你可以根据任何规则生成版本号了。

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
VS中实时获取SVN的版本号并写入到AssemblyInfo.cs中(C#)

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

osc_ett4kx6e
2018/08/20
2
0
VS中实时获取SVN的版本号并写入到AssemblyInfo.cs中(C#)

1.将项目中Properties中的AssemblyInfo.cs文件复制一份,命名为AssemblyInfo.template.cs,同时将该文件的编译属性设置为无。设置为无是为了不让该文件不参与编译。 同时将[assembly: Assemb...

ucliaohh
05/13
2
0
Jenkins持续部署-自动生成版本号

Jenkins持续部署-自动生成版本号 [TOC] 目录 Jenkins持续集成学习-Windows环境进行.Net开发1Jenkins持续集成学习-Windows环境进行.Net开发2Jenkins持续集成学习-Windows环境进行.Net开发3Je...

osc_eibr31r7
04/16
6
0
CentOS7下搭建SVN服务器

(1).安装SVN  1)安装SVN [root@youxi1 ~]# yum -y install subversion mod_dav_svn[root@youxi1 ~]# cat /etc/services | grep svnsvn 3690/tcp # Subversion  //SVN的端口号。3690svn 3......

osc_ncgu99wr
2019/07/06
6
0
SVN快速入门笔记【转】

SVN版本控制软件目的 协作开发 远程开发 版本回退 2. 什么是SVN subVersion 支持平台操作 支持版本回退 3. 获取SVN软件 属于C/S结构软件(客户端与服务端) server:VisualSVN client:Torto...

osc_nd0lr8gs
2019/03/25
1
0

没有更多内容

加载失败,请刷新页面

加载更多

基于 opencv 的图像处理入门教程

点击上方“算法猿的成长“,关注公众号,选择加“星标“或“置顶” 总第 146 篇文章,本文大约 5000 字,阅读大约需要 20 分钟 前言 虽然计算机视觉领域目前基本是以深度学习算法为主,但实际...

kbsc13
昨天
0
0
屁宝杀手升级啦!支持 Creator 2.4.0及所有2.X版本

2017年无意间写了两篇关于在 Cocos Creator 中使用 Protobufjs 的文章,随后开始了自己第一个副业产品pbkiller—屁宝杀手!没想到,一个小小的 Creator 插件工具,还活了这么久! 经过3年,直...

张晓衡
昨天
0
0
使用HTML5的自定义数据属性的jQuery选择器 - jQuery selectors on custom data attributes using HTML5

问题: I would like to know what selectors are available for these data attributes that come with HTML5. 我想知道哪些选择器可用于HTML5附带的这些数据属性。 Taking this piece of H......

javail
19分钟前
9
0
使用Jibri进行Jitsi Meet视频录制

前言 我们在做视频会议系统的时候,通常都会有会议录制功能,那么作为视频会议开源的翘楚,Jitsi是怎么做这一点的,在官方文档及其隐晦的情况下,我们该怎么成功搭建视频录制服务呢?下面我就...

死磕音视频
21分钟前
9
0
虚拟dom

一、什么是虚拟dom virtual dom(虚拟dom),是由普通的js对象来描述dom对象,因为不是真实的dom,所以叫virtual dom。 二、为什么要用虚拟dom来描述真实的dom? 举个例子,我们获取一个dom元素...

一生懸命吧
21分钟前
35
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部