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