我已经对这个主题进行了一些搜索,并且能够找到生成自定义构建号以及补丁程序集信息的各个解决方案,但是我无法完成这两个。使用我在搜索中找到的自定义POWERSHELL脚本时,我可以将内部版本号设置为我使用脚本创建的内容,但是此内部版本号不会修补。我在补丁方面唯一的成功是使用了套数和一个计数器。但是POWERSHELL脚本创建的数字不会持续到程序集修补程序可以使用的程度。我做错了吗?
答案 0 :(得分:3)
我终于用Chaitanya提供的一些逻辑来解决它......但是修改了:
$ww = ([Math]::Floor([DateTime]::Now.DayOfYear/7)+1)
Write-Host "##teamcity[buildNumber '%major.minor%.$ww.%build.counter%']"
$fileLocation = Join-Path -Path "%teamcity.build.checkoutDir%" -ChildPath "\SourceDir\AssemblyInfo.cs"
$oldValue = "AssemblyFileVersion\(""(\d+)\.\d+\.\d+\.\d+""\)"
$newValue = [string]::Concat("AssemblyFileVersion(""%major.minor%.", $ww, ".%build.counter%", """)")
(get-content $fileLocation) | foreach-object {$_ -replace $oldValue, $newValue} | set-content $fileLocation
答案 1 :(得分:1)
在我们的项目中,我们使用CommonAssemblyInfo.cs文件解决了它。基本上将它添加到您的解决方案中,从单个文件中删除AssemblyInfo.cs文件,并在编译时所有dll将具有CommonAssemblyInfo.cs文件中指定的程序集信息。
我们在编译之前将此文件更新为第一步。我们使用的唯一编号是源控制系统的变更集ID(在我们的例子中为TFS)。基本上,源控制变更集编号保证是唯一且高度相关的。它将告诉您源控件中哪个变更集生成了哪个程序集。
基本上我们构建配置的第一步是PowerShell脚本,如下所示(相应地更新CommonAssemblyInfo.cs的路径)
$fileLocation = Join-Path -Path "%teamcity.build.checkoutDir%" -ChildPath "Source\CommonAssemblyInfo.cs"
$oldValue = "AssemblyVersion\(""(\d+)\.\d+\.\d+\.\d+""\)"
$newValue = 'AssemblyVersion("$1.0.0.%build.vcs.number%")'
(get-content $fileLocation) | foreach-object {$_ -replace $oldValue, $newValue} | set-content $fileLocation
因此,构建setp 1,使用上面的Changeset编号更新程序集版本。第2步,编译您的解决方案。第3步到x,测试,部署等等。