[英]How do I change a web site from an IIS hosted site to an ASP.Net Development Server hosted site?
[英]How do I sync the SVN revision number with my ASP.NET web site?
Stack Overflow 底部有一个颠覆版本号:
SVN 修订版:679
我想在我的.NET Web Site/Application
、Windows 窗体、WPD 项目/解决方案中使用这种自动版本控制。
我该如何实施?
看起来 Jeff 正在使用CruiseControl.NET,这是基于对播客成绩单的一些翻阅。 这似乎具有从源代码控制到生产的自动化部署能力。 这可能是插入发生的地方吗?
我们使用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 系统中的 build # 更有用,因为不仅可以通过 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 属性,并将 abcd 版本号替换为 abcBuildNumber。 我们通常会将源代码检查到树中,其中构建器编号的前三个部分是固定的,第四部分为零(fe,今天是 1.0.2.0)。
在构建过程中,确保 SetVersionNumber 任务先于构建任务。 最后,我们使用 Zip 任务来压缩构建结果,以便我们拥有每个自动构建的二进制文件的历史记录。
您可以通过在代码中的任何位置添加以下内容来实现
$Id:$
所以例如@Jeff 做了:
<div id="svnrevision">svn revision: $Id:$</div>
并在服务器签入时将 $Id:$ 替换为当前修订号。 我也找到了这个参考。
还有$Date:$ , $Rev:$ , $Revision:$
如果您使用的是ASP.Net MVC
(就像 StackOverflow 那样),我已经编写了一个易于遵循的 3 步指南,介绍如何自动获取和显示最新的 SVN 修订版。 该指南的灵感来自于对这个问题的思考! :o)
@Balloon 如果您使用的是 TortoiseSVN,则可以使用打包的SubWCRev程序。 它查询工作副本并告诉您最高修订号。 诚然,这似乎是解决服务器端问题的客户端方法,但由于它是一个不错的命令行程序,因此您应该能够相当容易地捕获其输出以供使用。
$rev
和其他类似的文件是单个文件的修订版,因此除非文件更改,否则它们不会更改。 网页上的数字是(很可能,我在这里假设)整个项目的 svn 修订号。 这与其他人一直指向的文件修订不同。
在这种情况下,我假设 CCNET 正在提取项目的修订号并用该编号重写网页的一部分。 任何 CI 解决方案都应该能够做到这一点,使用 CCNET 和 Teamcity 自行设置(虽然不是网页,但部署/组装版本的自动版本控制)。
为了让您做到这一点,请使用支持它的 CI 解决方案,或使用您的构建过程 (MSbuild/Nant) 来存储该版本并将其写入文件,然后再“部署”它。
添加到@BradWilson 的回答中: “如果需要,您还可以让源代码控制提供商提供源修订号”
连接 Subversion 和 MSBuild: MSBuild 社区任务项目
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.