让TFS将变更集放入程序集版本中

vid*_*ige 13 tfs build version changeset

我有一个干净利落的Team Foundation Server Build.它生成几个程序集,我希望程序集版本的最后一个数字是changset数.也就是说,如果我提交changeset11667,例如程序集版本号应为"xyz11667".我检查了可用的宏,但没有一个是变更集号.

我仍然希望能够在我的开发机器上正常构建解决方案文件,只需使用签入的版本号.

我该如何实现这一目标?

Chr*_*ter 6

一旦超过65,535个变更集,就会意识到这将停止工作.也许你想更新其他一些领域.顺便说一句,是的,构建工程是工程.指出解决方案并告诉它构建只是旅程的开始.

  • 我相信人们说Y2K在60年代和70年代也不会成为问题. (3认同)
  • Y2K真的有问题吗? (3认同)

vid*_*ige 3

最后,我的一位同事编写了以下 MSBuild 任务来解决该问题。

public class GetNextBuildNumber : Task
{
    [Required]
    public string TfsCommand { get; set; }

    [Required]
    public string TfsArgument { get; set; }

    [Output]
    public int BuildNumber { get; set; }

    public override bool Execute()
    {
        BuildNumber = GetLatestVersionNumber();
        return true;
    }

    private int GetLatestVersionNumber()
    {
        var process = new RunProcess();
        var result = process.ExecuteCommand(TfsCommand, TfsArgument);

        return ParseResult(result);
    }

    private int ParseResult(string result)
    {
        const string changeset = "Changeset:";
        const string user = "User:";

        if (string.IsNullOrEmpty(result) || !result.Contains(changeset))
        {
            // Invalid result
            Log.LogWarning("Could not get latest build number. Reason: " + result);
            return 0;
        }

        var indexOfChangeset = result.IndexOf(changeset, StringComparison.InvariantCulture) + changeset.Length;
        var indexOfUser = result.IndexOf(user, StringComparison.InvariantCulture);
        var revision = result.Substring(indexOfChangeset, indexOfUser - indexOfChangeset).Trim();

        return Convert.ToInt32(revision);
    }

}
Run Code Online (Sandbox Code Playgroud)