0

我正在开发一个 TFS 实用程序,用于获取 TFS 中特定项目的变更集。我有一个主要用于测试的家用 TFS 2010 服务器,但我决定尝试对我贡献的一个 codeplex 项目进行尝试。这样,我可以针对比本地更多的变更集测试功能。

虽然它在我的环境中运行良好,但通过电线连接到 codeplex 让我感到困惑。我的应用程序查询历史记录,但是,当尝试遍历历史记录时(即延迟加载 IEnumerable 时),我的应用程序挂起。

查看 Intellitrace,我看到了几个“第一次机会”异常,即“指定版本中不存在该项目”——这显然不是真的,因为我试图在 VersionSpec 获取“$/”的历史记录。最新的。

在强制调试暂停后,我还看到两个或三个连续的服务器 500 错误返回给我。

其他操作(如GetItems())工作正常,所以我很确定身份验证不是问题。

有什么想法吗?

这是代码:

IEnumerable items = vcs.QueryHistory("$/", VersionSpec.Latest, 1, RecursionType.None, null, null, null, 5, true, false);

        List<ChangesetItem> returnList = new List<ChangesetItem>();
        foreach (Changeset cs in items)  //hangs here on first iteraiton
        {
            ChangesetItem newItem = new ChangesetItem()
            {
                ChangesetId = cs.ChangesetId,
                //ChangesetNote = cs.CheckinNote.Values[0].Value,
                Comment = cs.Comment,
                Committer = cs.Committer,
                CreationDate = cs.CreationDate
            };

            returnList.Add(newItem);
        }
4

1 回答 1

0

嗬!找到了。问题出在我的 QueryHistory 调用上:

IEnumerable items = vcs.QueryHistory("$/", 
                  VersionSpec.Latest, 
                  1, // the deletionId should be '0' or a unique deletion identifier
                  RecursionType.None, 
                  null, 
                  null, 
                  null, 
                  5, 
                  true, 
                  false);

我评论了上面的代码行。出于某种原因,我认为 deleteId 应该是“1”,但是,现在我已经查看了 API,我意识到它应该是零(对于现有文件),或者文件的特定删除 ID已被删除。显然,API 正在寻找一个删除Id 为“1”的文件,但它找不到,从而导致崩溃。

于 2010-06-18T00:30:55.320 回答