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

svn修订版:679

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

我该如何实现?

===============>>#1 票数:30 已采纳

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

===============>>#2 票数:26

我们使用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任务压缩构建结果,以便我们拥有每个自动构建的二进制文件的历史记录。

===============>>#3 票数:24

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

$Id:$

所以例如@Jeff做了:

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

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

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

===============>>#4 票数:17

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

===============>>#5 票数:10

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

===============>>#6 票数:9

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

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

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

===============>>#7 票数:5

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

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

  ask by Zack Peterson translate from so

未解决问题?本站智能推荐:

关注微信公众号