如何将SVN修订号与我的ASP.NET网站同步?

Zack Peterson 89 .net svn versioning asp.net

Stack Overflow底部有一个subversion版本号:

svn修订版:679

我想在我的.NET Web Site/ApplicationWindows窗体,WPD项目/解决方案中使用这种自动版本控制.

我该如何实现?

saint_groceo.. 31

看起来Jeff正在使用CruiseControl.NET基于一些翻阅播客的成绩单.这似乎具有从源代码控制到生产的自动部署功能.这可能是插入发生的地方吗?

  • 如果您没有使用CruiseControl.Net,那么请查看我的答案(无耻插头!) - http://stackoverflow.com/questions/163/how-do-i-sync-the-svn-revision-number-with- my-aspnet-web-site#374153; o) (2认同)

Brad Wilson.. 27

我们使用xUnit.net进行自动构建.我们使用CruiseControl.net(并正在尝试TeamCity).我们为持续集成运行的MSBuild任务会自动更改我们的内部版本号,因此生成的构建ZIP文件包含一组正确版本的DLL和EXE.

我们的MSBuild文件包含一个用于执行正则表达式替换的DLL的UsingTask引用:(欢迎使用此DLL,因为它也包含在MS-PL许可证中)

  <UsingTask
     AssemblyFile="3rdParty\CodePlex.MSBuildTasks.dll"
     TaskName="CodePlex.MSBuildTasks.RegexReplace"/>

接下来,我们提取构建号,它由CI系统自动提供.如果需要,您还可以让源控制提供程序提供源修订号,但我们发现CI系统中的构建#更有用,因为不仅可以通过CI构建号查看集成结果,还可以提供链接回构建中包含的变更集.

 <!-- Cascading attempts to find a build number -->

 <PropertyGroup Condition="'$(BuildNumber)' == ''">
   <BuildNumber>$(BUILD_NUMBER)</BuildNumber>
 </PropertyGroup>
 <PropertyGroup Condition="'$(BuildNumber)' == ''">
   <BuildNumber>$(ccnetlabel)</BuildNumber>
 </PropertyGroup>
 <PropertyGroup Condition="'$(BuildNumber)' == ''">
   <BuildNumber>0</BuildNumber>
 </PropertyGroup>

(我们尝试来自TeamCity的BUILD_NUMBER,然后来自CC.net的ccnetlabel,如果两者都不存在,我们默认为0,这样我们就可以手动测试自动构建脚本.)

接下来,我们有一个任务将构建号设置为一个GlobalAssemblyInfo.cs文件,我们链接到所有项目中:

 <Target Name="SetVersionNumber">
   <RegexReplace
       Pattern='AssemblyVersion\("(\d+\.\d+\.\d+)\.\d+"\)'
       Replacement='AssemblyVersion("$1.$(BuildNumber)")'
       Files='GlobalAssemblyInfo.cs'/>
   <Exec Command="attrib -r xunit.installer\App.manifest"/>
 </Target>

这将找到AssemblyVersion属性,并用abcBuildNumber替换abcd版本号.我们通常会将源检查到树中,并且构建器编号的前三部分是固定的,第四部分是零(fe,今天它是1.0.2.0).

在构建过程中,确保SetVersionNumber任务在构建任务之前.最后,我们使用Zip任务压缩构建结果,以便我们拥有每个自动构建的二进制文件的历史记录.


Nick Berardi.. 25

您可以在代码中的任何位置添加以下内容

$Id:$

所以例如@Jeff做了:

<div id="svnrevision">svn revision: $Id:$</div>

当在服务器中检查时,用当前版本号替换$ Id:$.我也找到了这个参考.

还有$ Date:$,$ Rev:$,$ Revision:$

  • 这不会只是将最后一次更改的修订号插入该特定文件吗?我尝试设置一个双文件存储库并更改一个,并尝试导出和结帐,另一个文件在两种情况下都保持为1. (5认同)

Andrew.. 17

如果您正在使用ASP.Net MVC(如StackOverflow那样),我已经编写了一个易于遵循的三步指南,介绍如何自动获取和显示最新的SVN版本.该指南的灵感来自于对这个问题的思考!:O)


nickf.. 10

@Balloon如果您使用的是TortoiseSVN,则可以使用打包的SubWCRev程序.它查询工作副本并告诉您最高版本号.不可否认,这似乎是服务器端问题的客户端方法,但由于它是一个很好的命令行程序,您应该能够相当容易地捕获其输出以供使用.


James Pogran.. 9

$rev和其他类似的是各个文件的修订版,因此除非文件发生变化,否则它们不会更改.网页上的数字(很可能是我在这里假设的)整个项目的svn修订版号.这与其他人指出的文件修订版不同.

在这种情况下,我假设CCNET正在提取项目的修订号,并用该号码重写网页的一部分.任何CI解决方案都应该能够做到这一点,使用CCNET和Teamcity自己设置它(虽然不是网页,但是部署/汇编版本的自动版本化).

为了让您这样做,请使用支持它的CI解决方案,或使用您的构建过程(MSbuild/Nant)来存储该版本,并在"部署"它之前将其写入文件.


jan.. 5

添加到@ BradWilson的答案:"如果您愿意,还可以让您的源代码管理提供商提供源代码修订号"

连接Subversion和MSBuild: MSBuild社区任务项目