我正在开发一个TFS实用程序,它可以获取TFS中特定项目的更改集。我有一个家庭TFS 2010服务器,我主要用于测试,但我决定尝试对付我贡献的codeplex项目。这样,我可以针对比本地更多的变更集测试功能。
虽然它在我的环境中运行良好,但通过电线连接到codeplex让我感到难过。我的应用程序查询历史记录,但是当试图遍历历史记录时(即懒惰加载IEnumerable),我的应用程序挂起。
看看Intellitrace,我看到了几个“第一次机会”异常“项目在指定版本中不存在” - 这显然不是真的,因为我正试图获取历史记录“$ / “在VersionSpec.Latest。
在强制调试暂停后,我还看到两个或三个连续的服务器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);
}
答案 0 :(得分: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正在寻找一个deleteId为'1'的文件,它无法找到,从而导致崩溃。