2010-06-12 60 views
0

我正在使用TFS实用程序来获取TFS中特定项目的更改集。我有一个家庭TFS 2010服务器,我主要用于测试,但我决定尝试一下我为之贡献的codeplex项目。这样,我就可以测试比我在本地更多的变更集的功能。针对codeplex项目的QueryHistory无限期挂起

虽然它在我的环境中工作正常,但通过电缆走向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

卫生署!找到了。问题出在我的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); 

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