堆栈溢出在底部有一个Subversion版本号:
svn修订版:679
我想在.NET Web Site/Application
Windows窗体,WPD项目/解决方案中使用这种自动版本控制。
我该如何实施?
堆栈溢出在底部有一个Subversion版本号:
svn修订版:679
我想在.NET Web Site/Application
Windows窗体,WPD项目/解决方案中使用这种自动版本控制。
我该如何实施?
Answers:
看起来Jeff正在使用基于播客成绩单的一些信息的CruiseControl.NET。这似乎具有从源代码控制到生产的自动部署功能。这可能是插入发生的地方吗?
我们使用xUnit.net进行此操作以实现自动化构建。我们使用CruiseControl.net
(并正在尝试TeamCity)。我们为持续集成而运行的MSBuild任务会自动为我们更改内部版本号,因此生成的内部ZIP文件包含一组版本正确的DLL和EXE。
我们的MSBuild文件包含一个执行正则表达式替换的DLL的UsingTask参考:(欢迎使用此DLL,因为它也受MS-PL许可证保护)
<使用任务 AssemblyFile =“ 3rdParty \ CodePlex.MSBuildTasks.dll” TaskName =“ CodePlex.MSBuildTasks.RegexReplace” />
接下来,我们提取内部版本号,由CI系统自动提供。如果需要,您还可以让源代码控制提供程序提供源版本号,但是我们发现CI系统中的内部版本号更有用,因为不仅可以通过CI内部版本号看到集成结果,而且还提供了链接回构建中包含的变更集。
<!-级联尝试查找内部版本号-> <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 模式='AssemblyVersion \(“(\ d + \。\ d + \。\ d +)\。\ d +” \)' Replacement ='AssemblyVersion(“ $ 1。$(BuildNumber)”)' Files ='GlobalAssemblyInfo.cs'/> <Exec Command =“ attrib -r xunit.installer \ App.manifest” /> </ Target>
这将找到AssemblyVersion属性,并将abcd版本号替换为abcBuildNumber。我们通常将源代码签入树中,并将生成器编号的前三个部分固定不变,将第四个部分固定为零(例如,今天是1.0.2.0)。
在构建过程中,请确保SetVersionNumber任务在构建任务之前。最后,我们使用Zip任务来压缩构建结果,以便我们拥有每个自动化构建的二进制文件的历史记录。
您可以通过在代码中的任意位置添加以下内容来实现
$Id:$
因此,例如,@ Jeff做到了:
<div id="svnrevision">svn revision: $Id:$</div>
然后在服务器中检查时,将$ Id:$替换为当前的修订号。我也找到了这个参考。
还有$ Date:$,$ Rev:$,$ Revision:$
如果您正在使用ASP.Net MVC
(就像StackOverflow一样),我就如何自动获取和显示最新的SVN修订版编写了一个易于遵循的三步指南。该指南的灵感来自于对这个问题的思考!:o)
要添加到@BradWilson的答案中:“如果需要,您还可以让源代码控制提供程序提供源版本号”
要连接Subversion和MSBuild: MSBuild社区任务项目