首页 / 知识

关于.net:如何将SVN版本号与ASP.NET网站同步?

2023-04-11 13:12:00

关于.net:如何将SVN版本号与ASP.NET网站同步?

How do I sync the SVN revision number with my ASP.NET web site?

Stack Overflow在底部具有一个版本转换版本号:

svn revision: 679

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

我该如何实现?


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


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

我们的MSBuild文件包含用于DLL的UsingTask参考,该DLL可以进行正则表达式替换:(欢迎使用此DLL,因为它也受MS-PL许可证的保护)

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

接下来,我们提取内部版本号,该版本号由CI系统自动提供。如果需要,您还可以让源代码控制提供程序提供源版本号,但是我们发现CI系统中的内部版本号更有用,因为不仅可以通过CI内部版本号看到集成结果,而且还提供了一个链接回到构建中包含的变更集。

1
2
3
4
5
6
7
8
9
10
11
 <!-- 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文件中:

1
2
3
4
5
6
7
 <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.d版本号替换为a.b.c.BuildNumber。我们通常会将源代码检入到树中,并将生成器编号的前三个部分固定不变,将第四个部分固定为零(例如,今天是1.0.2.0)。

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


您可以通过在代码中的任意位置添加以下内容来做到这一点

1
$Id:$

例如,@ Jeff做到了:

1
svn revision: $Id:$

,并且在服务器中选中后,将$ Id:$替换为当前版本号。我也找到了这个参考。

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


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


@气球
如果使用的是TortoiseSVN,则可以使用打包的SubWCRev程序。它查询工作副本,并告诉您最高的修订号。诚然,这似乎是解决服务器端问题的客户端方法,但是由于它是一个不错的命令行程序,因此您应该能够捕获其输出以便于使用。


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

在这种情况下,我假设CCNET正在提取项目的修订版本号,并使用该编号重写网页的一部分。任何CI解决方案都应该能够做到这一点,并通过CCNET和Teamcity自行设置(尽管不是网页,而是部署/程序集版本的自动版本控制)。

为了执行此操作,请使用支持它的CI解决方案,或者使用构建过程(MSbuild / Nant)来存储该版本并将其写入文件,然后"部署"。


要添加到@BradWilson的答案中,请执行以下操作:"如果需要,您也可以让源代码控制提供程序提供源版本号"

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


版本号同步网站转换

最新内容

相关内容

热门文章

推荐文章

标签云

猜你喜欢