【问题标题】:Team Foundation Server: Getting the Changeset Id from PolicyBase objectTeam Foundation Server:从 PolicyBase 对象获取变更集 ID
【发布时间】:2011-12-14 05:59:06
【问题描述】:

我正在使用 C# 在 Visual Studio 2010 中编写自定义签入策略。我扩展了类 PolicyBase 并覆盖了 Evaluate() 方法,以便我可以检查用户的签入注释是否包含特定信息。我正在使用 this.PendingCheckin.PendingChanges.Comment 获取用户的签到评论

我想做的是提取将分配给签入的变更集编号。我将在哪里以及如何获得这个号码?

我猜 Evaluate 方法是错误的地方,因为此时变更集已提交,因此无法确定变更集编号。

TIA

【问题讨论】:

    标签: visual-studio-2010 visual-studio-2008 tfs


    【解决方案1】:

    您无法通过入住政策在任何程度上确定地执行此操作,因为它们仅在入住前进行评估。当您签入时,服务器会为您分配变更集。

    您可以尝试通过查询 $/ 上的历史记录来推断下一个变更集编号(限制返回 1 个历史记录项)。但显然,如果您依赖此值,您将遇到竞争条件 - 有人可以轻松击败您进行下一次签到,从而获得您认为下一个签到的数字。

    也就是说,您可以在签到政策框架之外获取有关签到的数据。你可以hook up a CommitCheckin event to an instance of Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer,也可以联系an alert that will notify you when a check-in occurs

    【讨论】:

    • 这种程度的不确定性会使其不适合我的目的。我觉得奇怪的是,没有办法使用签到政策或其他一些技术来获得这个。
    • 为什么奇怪?这是完全不可知的。签入策略在您进行未决更改时和之后运行 - 从字面上看。他们不仅在您办理登机手续之前进行评估。 (即使他们是,他们仍然无法确定地知道变更集编号,因为仍然存在竞争条件,只是一个窗口较小的竞争条件。)
    • 我知道 Evaluate 方法仅在签入之前被调用,但我假设在签入发生时会暴露一些其他方法,从而为您提供保证的变更集编号。这个钩子不存在的事实让我觉得很奇怪。
    • 我明白了 - 这不是签入策略 API 的一部分,但您可以在提交变更集后侦听 TFS 事件以获取变更集数据。我用一些可能有帮助的文档的指针编辑了上面的答案。
    • 顶的东西,感谢您的回复和额外的信息。 (抱歉,有一段时间被转移到另一项任务上,所以才重新开始。)
    猜你喜欢
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    相关资源
    最近更新 更多