2010-06-12 59 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'的文件,該文件無法找到,從而導致崩潰。