2014-03-06 53 views
2

我已經完成了一些關於此主題的搜索,並且能夠找到單獨的解決方案來生成自定義內部版本號以及補丁程序集信息,但是我無法完成這兩項。當使用我在搜索中找到的自定義POWERSHELL腳本時,我可以將內部版本號設置爲使用腳本創建的內容,但是此版本號不會進行修補。我在補丁中唯一的成功是使用設置數字和計數器。但是,POWERSHELL腳本創建的編號不會持續到程序集修補器可以使用的程度。我做錯了嗎?如何在TeamCity中生成自定義內部版本號,然後將其修補爲程序集信息?

回答

3

我最後用切塔尼亞的邏輯提供一點點解決它......但修改:

$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

在我們的項目中,我們使用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,與變更集數更新您的程序集版本如上。第2步,編譯你的解決方案。第3步對x,測試,部署等等,等等

+0

此代碼似乎讓我非常接近。它正在成功更改程序集內部版本號,但最終編譯的EXE仍在其細節中顯示1.0.0.0。但是當我查看teamcity checkout文件夾的工作目錄時,會正確調整assemblyinfo文件。所以這似乎是又一次不堅持的情況。 – DrDoomPDX

+0

爲了澄清,我在編譯步驟之前使用了這段代碼。所以我不確定它爲什麼不堅持。相反,如果我將AssemblyInfo patcher與系統計數器/內部版本號一起使用,它似乎可以很好地完成這項工作。我用這種方法唯一的問題是,它不允許我以我想要的方式自定義構建編號。 – DrDoomPDX

相關問題