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

堆栈溢出在底部有一个颠覆版本号:

svn revision:679

我想用我的 .NET网站/应用程序,Windows Forms,WPD项目/解决方案来使用这种自动版本控制。

我如何实现这一点?

0
额外 编辑
意见: 1
@Balloon如果您使用的是TortoiseSVN,则可以使用打包的 SubWCRev 程序。它查询工作副本并告诉你最高版本号。无可否认,这似乎是服务器端问题的客户端方法,但由于它是一个很好的命令行程序,因此您应该能够很容易地捕获其输出。
额外 作者 nickf,
如果你不使用TortoiseSVN作为SubWCRev,就像我说的那样 here ,你可以使用 svnversion ,它做同样的事情。
额外 作者 nickf,

7 答案

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

$Id:$

举例来说@Jeff做了:

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

并且在服务器中选中当前版本号替换$ Id:$时。我也找到此参考资料

There is also $Date:$, $Rev:$, $Revision:$

0
额外
您需要确保文件也具有svn:keywords属性设置,否则$ Id $等不会被自动替换。请参阅页面。 (向下滚动到svn:关键字)
额外 作者 Michael Stum,
我刚刚通过使用$ Rev $来尝试这种方式,并且它在某种程度上起作用。问题在于它只会在出现的文件被更改时更新关键字。这意味着如果对不影响带有$ Rev $的文件的项目进行更改(在我的情况下,是我的ASP.NET母版页),项目将具有比显示给用户更高的修订版本。有人对此有任何想法吗?有没有办法让SVN永远更新文件中的关键字?
额外 作者 Chris Roberts,
这是不是只是将最后一次更改的版本号插入到特定文件中?我尝试设置一个双文件存储库并更改一个,并尝试导出和结帐,另一个文件在两种情况下都保持为1。
额外 作者 Lasse Vågsæther Karl,
你是对的,你需要使用不同的机制。
额外 作者 Lasse Vågsæther Karl,
使用VisualSVN和TortoiseSVN,添加$ Id:$只是导致页面呈现“$ Id:$”。注意这个答案在哪个服务器/客户端下工作可能很有用。
额外 作者 Travis,
您还需要将 svn:keywords Subversion属性添加到文件中,并确保它包含 Id 值。但是,它没有什么用处:这个特定的文件可能没有被修改。
额外 作者 Álvaro González,
lassevk是正确的,这只在文件本身发生变化时才会改变。
额外 作者 Bruno Lopes,

看起来像杰夫使用 CruiseControl.NET 基于一些翻阅播客记录。这似乎具有从源代码管理到生产的自动部署功能。可能这是插入发生的地方?

0
额外
链接已损坏@saint_groceon
额外 作者 Cacho Santa,
如果你没有使用CruiseControl.Net,那么查看我的答案(无耻的插件!) - “> stackoverflow.com/questions/163/… ; O)
额外 作者 Andrew,

$rev and others like it are revisions for the individual files, so they won't change unless the file changes. The number on the webpage is (most likely, I'm assuming here) the svn revision number for the whole project. That is different than the file revisions, which others have been pointing to.

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

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

0
额外

To add to @BradWilson's answer: "You could also get your source control provider to provide the source revision number if you want"

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

0
额外

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

0
额外

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

Our MSBuild file contains a UsingTask reference for a DLL which does regular expression replacements: (you're welcome to use this DLL, as it's covered by the MS-PL license as well)

  

接下来,我们提取构建号,由CI系统自动提供。你也可以得到你的源代码控制提供修订版本号,如果你想要的,但我们发现在CI系统的内部版本号是更为有用,因为不仅可以通过CI版本号,这也提供了一个看积分结果链接回构建中包含的变更集。

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

 
   $(BUILD_NUMBER)
 
 
   $(ccnetlabel)
 
 
   0
 

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

接下来,我们有一个任务将内部版本号设置为一个GlobalAssemblyInfo.cs文件,该文件链接到我们所有的项目中:

 
   
   
 

这找到AssemblyVersion属性,并用a.b.c.BuildNumber替换a.b.c.d版本号。我们通常会将源代码复选到树中,并且修建者编号的前三部分是固定的,第四部分是零(f.e.,今天是1.0.2.0)。

在您的构建过程中,确保SetVersionNumber任务先于您的构建任务。最后,我们使用Zip任务来压缩构建结果,这样我们就可以获得每个自动构建的二进制文件的历史记录。

0
额外

如果你使用 ASP.Net MVC (就像StackOverflow那样),我写了一个易于遵循3步指南自动获取并显示最新的SVN修订版。该指南的灵感来自于对自己的这个问题的思考! :O)

0
额外
链接已损坏,或网站已关闭
额外 作者 Cacho Santa,
谢谢@cacho,修复 - 这是一个服务器故障[原文如此]; o)
额外 作者 Andrew,
固定!感谢您告诉我:o)
额外 作者 Andrew,
听起来很棒,链接断了!
额外 作者 Peter C,
这对我们来说是一个很好的解决方案,可以根据我们的SVN修订版自动显示版本。一个好处是它不需要打电话给你的SVN服务器。
额外 作者 Ben Elder,