2017-03-31 39 views
1

我只發佈這是由我的TFS生成定義一個生成的二進制文件和每個版本接收一個唯一的版本號(1.0。$ YY $ DAYOFYEAR。$ REV)。構建名稱的名稱包含此版本號。版本號由PowerShell腳本設置爲程序集版本和二進制文件版本。我只有一個構建結果rentention(包括我投遞文件夾中生成的二進制文件)爲60天,現在我想知道:我將如何可能找出一些版本號是一歲,其變更集它是從讓建我可以看看源代碼或重建完整的二進制文件?我是否必須在構建期間以某種方式添加變更集信息?我必須在構建期間設置的版本號中對變更集編號進行編碼嗎?這兩個想法似乎都不是很巧妙。如何找出TFS 2015構建的變更集是從?

回答

1

我終於想出了一個PowerShell腳本,我鉤到我的生成定義爲只是之後的一個步驟是一個類似於建議here額外的構建步驟,設定的版本屬性中的所有AssemblyInfo.cs文件:

$systDefinitionId = $env:SYSTEM_DEFINITIONID 
$buildDefVersion = $env:BUILD_DEFINITIONVERSION 
$buildDefName = $env:BUILD_DEFINITIONNAME 
$buildSourceVersion = $env:BUILD_SOURCEVERSION 
$buildSourceBranch = $env:BUILD_SOURCEBRANCH 

$SrcPath = $env:BUILD_SOURCESDIRECTORY 
$AllVersionFiles = Get-ChildItem $SrcPath AssemblyInfo.cs -recurse 
$AllVersionFilesCount = ($AllVersionFiles | Measure-Object).Count 

Write-Verbose "Updating $AllVersionFilesCount AssemblyInfo.cs files in path ""$SrcPath"" with source information." -Verbose 

Write-Verbose "ID of build definition:  $systDefinitionId" -Verbose 
Write-Verbose "Version of build definition: $buildDefVersion" -Verbose 
Write-Verbose "Name of build definition: $buildDefName" -Verbose 
Write-Verbose "Changeset to build:   $buildSourceVersion" -Verbose 
Write-Verbose "Branch to build from:  $buildSourceBranch" -Verbose 

foreach ($file in $AllVersionFiles) 
{ 
(Get-Content $file.FullName) | 
    %{$_ -replace 'AssemblyProduct\(""\)', "AssemblyProduct(""$buildDefName/$buildSourceVersion"")" } | 
    %{$_ -replace 'AssemblySourceBranch\(""\)', "AssemblySourceBranch(@""$buildSourceBranch"")" } | 
    %{$_ -replace 'AssemblySourceChangeset\(0\)', "AssemblySourceChangeset($buildSourceVersion)" } | 
    %{$_ -replace 'AssemblyBuild\(""\)', "AssemblyBuild(@""$buildDefName/ID: $systDefinitionId/Version: $buildDefVersion"")" } | 
Set-Content $file.FullName -Force 
} 

我正在修改AssemblyProduct屬性,方法是向其中寫入構建定義名稱和用於創建二進制文件的變更集。稍後,這些信息在詳細信息選項卡上的Windows資源管理器中的exe或dll的屬性中可見。

此外,我已經定義了自定義屬性AssemblySourceBranchAssemblySourceChangesetAssemblyBuild以攜帶更詳細的信息。它們都具有相同的結構,所以爲了簡便起見只AssemblySourceChangeset源代碼:

[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false)] 
public class AssemblySourceChangesetAttribute : Attribute 
{ 
    public AssemblySourceChangesetAttribute(uint changeset) 
    { 
    Changeset = changeset; 
    } 

    public uint Changeset { get; } 
} 

應在「公開」可見產品領域的信息還不足以能夠重建二進制文件,仍然可以導致以反映在EXE或DLL,並閱讀那些自定義屬性,這些自定義屬性具有關於源分支,存儲的構建定義的ID和版本的信息。

+0

當你自己修復它時總會更好,因爲解決方案最適合你的場景!:) –

1

你可以添加一個PowerShell腳本或extension task將生成的發行說明作爲TFS vNext構建的一部分。你會得到的東西如下:

enter image description here

然後你可以存儲它,因爲源代碼看看這個blog

+0

我更喜歡直接在二進制或在TFS的信息「版本變更」的一些存儲。發行說明很容易丟失,因爲有人只將二進制文件複製到其他地方。然而,它是記錄相關工作項和提交的有趣機制。將嘗試記住你的建議。 – David

1

前言:XAML建立。

您可以清楚地瞭解自己的所有構建產品,通過創建發佈/修補程序分支,並具有建立具體到這些分支的定義。將構建版本克隆到分支是很容易的,並且使用版本號作爲二進制郵票的一部分。我更喜歡使用分支版本號方法,並使用該版本號來加印我的二進制文件。只要你在每個分支的二進制創造獨特的生成定義,你就可以輕鬆地查看過去的版本,看看到底是什麼的變更與您需要it.All是二進制的版本號相關聯,和你」將能夠輕鬆地追溯到源代碼。 enter image description here

+0

您的解決方案針對XAML構建,是否正確? – David

+0

是的,我在我的回答中作了前言。:) –

+0

對不起,我忘了提及我正在使用vNext構建定義。 – David