1

有沒有辦法跟蹤TFS 2010中構建定義的更改?請在Visual Studio中轉到「團隊資源管理器> ProjectName>構建」以查看我在說什麼。您需要訪問TFS服務器以查看我所指的內容。現在,當您進入團隊資源管理器> ProjectName> Builds時,您可以創建一個構建定義來編譯TFS上的csproj或sln文件。我想知道的是,如果對現有的定義進行任何更改或添加新的定義,是否有辦法對這些定義進行版本化?TFS 2010跟蹤構建定義更改?

回答

1

無法跟蹤對構建定義的更改。如果你有多個分支/版本需要構建,我建議創建一個不同的構建定義。

當您對構建進行排隊時,可以設置一些屬性,因此如果您想要一個不會將其輸出複製到放置服務器的構建,您可以擁有該構建,但如果要部署某個版本可以在排隊構建時設置放置文件夾。

TFS Power Toys中,您會看到一個「克隆構建定義」上下文菜單,以便您可以更容易地複製構建,只要您有許多要保持相似的設置即可。

+0

戴夫您好,感謝您的回覆。我確實安裝了TFS Power工具。但是這並沒有解決我追蹤構建定義隨時間變化的目的。 – Kalyan

+0

你真的不能。如果你真的想,你可以定期將定義過程參數作爲XML導出,或者類似的東西,但是根本沒有任何內容。 – DaveShaw

2

我遇到了同樣的問題,當團隊中有人修改了構建定義時,我試圖找到所有可用的選項,但沒有發現除Xeam Build Definition Extension之外的任何其他內容,僅支持VS 2012以後並有一些缺點,所以最終得到即時的工作,我寫了一個小應用程序,返回Last Modified ByLast Modified Date和完整的Build Definition細節,你可以與以前的版本比較,以找到發生了什麼變化。

進口Microsoft.TeamFoundation.Build.Client

Private Const RootFolder As String = "C:\TFS Utility Reports\" 

    ''' <summary> 
    ''' To Get the Build Definition Details 
    ''' </summary> 
    ''' <param name="teamProjectName"></param> 
    ''' <param name="buildDefinitionName"></param> 
    ''' <returns></returns> 
    ''' <remarks></remarks> 
    Public Shared Function GetBuildDefinitionDetails(teamProjectName As String, buildDefinitionName As String) As String 
     Dim buildDefinitionSummary As String = Nothing 
     Dim buildDefinitionDetails As String = Nothing 
     Dim reportPath As String = RootFolder & "Build Definitions\" & buildDefinitionName 
     Dim buildDefinitionDetailsFileName As String = reportPath & "\" & buildDefinitionName & "_" & Date.Now.ToString(CultureInfo.CurrentCulture).Replace("/", String.Empty).Replace(":", String.Empty) & ".txt" 
     Dim buildService = CType(TfsTeamProjectCollection.GetService(GetType(IBuildServer)), IBuildServer) 
     Dim buildDefinition As IBuildDefinition = buildService.GetBuildDefinition(teamProjectName, buildDefinitionName) 
     If buildDefinition IsNot Nothing Then 
      GetAllBuildDefinitions(teamProjectName) 
      buildDefinitionSummary = buildDefinition.ToString() 
      UpdateFile(buildDefinitionSummary, buildDefinitionDetailsFileName, reportPath) 
      If buildDefinition.Workspace IsNot Nothing Then 
       buildDefinitionDetails = String.Format(CultureInfo.CurrentCulture, "Last Modified By: {0}, Last Modified Date: {1}", 
                            buildDefinition.Workspace.LastModifiedBy, 
                            buildDefinition.Workspace.LastModifiedDate) 
      End If 
     End If 
     Return buildDefinitionDetails 
    End Function 


    ''' <summary> 
    ''' Generate Log/Summary/Report 
    ''' </summary> 
    ''' <param name="lineToWrite"></param> 
    ''' <param name="filePath"></param> 
    ''' <param name="folderPath"></param> 
    ''' <remarks></remarks> 
    Private Shared Sub UpdateFile(ByVal lineToWrite As String, ByVal filePath As String, ByVal folderPath As String) 
     Dim strFileName As String = String.Empty 
     lineToWrite = lineToWrite.Trim() 
     strFileName = filePath 
     Dim di As IO.DirectoryInfo = New IO.DirectoryInfo(folderPath) 
     If Not di.Exists Then 
      di.Create() 
     End If 
     Dim streamWriter As New StreamWriter(strFileName, True, System.Text.Encoding.ASCII) 
     Try 
      Dim strOutput As String 
      strOutput = lineToWrite.ToString 
      streamWriter.WriteLine(strOutput) 
     Catch ex As Exception 
      Throw 
     Finally 
      streamWriter.Dispose() 
     End Try 
    End Sub