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

nodit 发布于 2018-02-03 .net 最后更新 2018-02-03 01:00 1081 浏览

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

svn revision: 679
我想用我的.NET Web Site/Application,Windows Forms,WPD项目/解决方案来使用这种自动版本控制。 我如何实现这个?
已邀请:

yet

赞同来自:

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

$Id:$
所以举个例子@Jeff做了:
<div id="svnrevision">svn revision: $Id:$</div>
并在服务器中选中当前版本号替换$ Id:$。我也是found this reference。 还有 $ Date:$ $ Rev:$ $ Revision:$

tiste

赞同来自:

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

nodit

赞同来自:

$rev和其他像这样的文件是对个别文件的修订,所以它们不会改变,除非文件改变。网页上的数字(很可能,我假设在这里)是整个项目的svn修订版号。这与其他人指出的文件版本不同。 在这种情况下,我假设CCNET正在拉取项目的修订号,并用该号码重写网页的一部分。任何CI解决方案都应该能够做到这一点,使用CCNET和Teamcity(尽管不是网页,但自动版本化部署/程序集版本)自己设置。 为了做到这一点,请使用支持它的CI解决方案,或者使用您的构建过程(MSbuild/Nant)来存储该版本,并在“部署”之前将其写入文件。

lqui

赞同来自:

我们使用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版本号。我们通常会将源代码复制到树中,其中前三个部分是固定的,第四个是零(f.e.,今天是1.0.2.0)。 在您的构建过程中,确保SetVersionNumber任务先于您的构建任务。最后,我们使用我们的Zip任务来压缩构建结果,以便我们有每个自动构建的二进制文件的历史记录。

cea

赞同来自:

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

id_aut

赞同来自:

要添加到@ BradWilson的答案:“你也可以让你的源代码管理提供商提供源修订版本号,如果你想” 连接Subversion和MSBuild: MSBuild Community Tasks Project

eut

赞同来自:

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