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

时间:2008-08-01 18:00:14

标签: .net asp.net svn versioning

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

  

svn修订版:679

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

我该如何实现?

7 个答案:

答案 0 :(得分:30)

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

答案 1 :(得分:26)

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

我们的MSBuild file包含一个用于执行正则表达式替换的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属性,并用a.b.c.BuildNumber替换a.b.c.d版本号。我们通常会将源检查到树中,构建器编号的前三部分是固定的,第四部分是零(例如,今天它是1.0.2.0)。

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

答案 2 :(得分:24)

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

$Id:$

所以例如@Jeff做了:

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

并且在服务器中检查时,将$ Id:$替换为当前版本号。我也是found this reference

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

答案 3 :(得分:17)

如果你正在使用ASP.Net MVC(正如StackOverflow那样),我写了easy to follow 3-step guide on how to automatically get and display the latest SVN revision。该指南的灵感来自于对这个问题的思考! :O)

答案 4 :(得分:10)

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

答案 5 :(得分:9)

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

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

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

答案 6 :(得分:5)

要添加到@ BradWilson的答案:“如果需要,还可以让源控制提供程序提供源修订号”

连接Subversion和MSBuild: MSBuild Community Tasks Project