【问题标题】:TFS 2010 tracking build definition changes?TFS 2010 跟踪构建定义更改?
【发布时间】:2013-08-21 19:27:04
【问题描述】:

有没有办法在 TFS 2010 中跟踪对构建定义的更改?请转到 Visual Studio 中的“团队资源管理器 > 项目名称 > 构建”,看看我在说什么。您需要访问 TFS 服务器才能看到我所指的内容。现在,一旦您进入 Team Explorer> ProjectName > Builds,您就可以创建一个构建定义来在 TFS 上编译您的 csproj 或 sln 文件。我想知道的是,如果我对现有定义进行任何更改或添加新定义,是否有办法对这些构建定义进行版本控制?

【问题讨论】:

    标签: visual-studio msbuild team-explorer build-definition


    【解决方案1】:

    当团队中的某个人修改构建定义时,我遇到了同样的问题,我试图找到所有可用的选项,但除了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
    

    【讨论】:

      【解决方案2】:

      无法跟踪对构建定义的更改。如果您有多个需要构建的分支/版本,我建议创建不同的构建定义。

      一些属性可以在您对构建进行排队时设置,因此如果您想要一个不将其输出复制到放置服务器的 CI 构建,您可以拥有它,但是如果您想部署一个版本,您可以在构建队列时设置一个放置文件夹。

      TFS Power Toys 中,您会看到一个“克隆构建定义”上下文菜单,如果您有很多设置想要保持相似,您可以更轻松地复制构建。

      【讨论】:

      • 嗨,戴夫,感谢您的回复。我确实安装了 TFS Power 工具。但这并不能解决我跟踪构建定义随时间变化的目的。
      • 你真的不能。如果你真的想要,你可以定期将定义过程参数导出为 XML,或者类似的东西,但根本没有任何内置。
      【解决方案3】:

      有办法。 vsgallery里有这个工具:

      http://visualstudiogallery.msdn.microsoft.com/ec36f618-d122-48a3-8236-7d9cd19791ee

      我将它与 tfs2012 一起使用。我不知道它是否适用于 tfs2010

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-04
        • 1970-01-01
        • 2011-05-04
        • 1970-01-01
        • 2011-02-23
        • 2011-10-28
        相关资源
        最近更新 更多