2011-12-13 89 views
15

變更的獲取列表我需要創建兩個方法如下:TFS 2010:IDS

  1. 檢索TFS所有的變更。
  2. 檢索比指定變更集更新的所有變更集。

我已經做了一些谷歌搜索,並找到了一些鏈接,並設法拿出一些代碼。我似乎無法調出調用方法來獲取變更集項目的完整列表。我拙劣的東西在一起,得到這一點,但想知道如果有人能幫助我:

TfsTeamProjectCollection projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://mydomain.com:8080/tfs")); 
VersionControlServer versionControl = projectCollection.GetService<VersionControlServer>(); 
int latestId = versionControl.GetLatestChangesetId(); 

List<Changeset> changesetList = new List<Changeset>(); 
for (int i = 1; i < latestId; i++) 
{ 
    try 
    { 
     Changeset cs = versionControl.GetChangeset(i); 
     if (cs != null) 
     { 
      changesetList.Add(cs); 
     } 
    } 
    catch (ResourceAccessException) 
    { 
    } 
} 

獲取變更爲一些標識的拋出一個「ResourceAccessException」例外這就是爲什麼處理程序已被添加。

關於如何以「正確」的方式做到這一點的任何想法?

我正在使用Visual Studio 2010和TFS 2010.應用程序正在用C#編寫爲.Net 4.0應用程序。

TIA

+0

聽起來像用戶權限問題。您是否嘗試過可以傳遞用戶憑據的GetTeamProjectCollection的重載?否則,它將使用執行代碼的用戶的憑據。 – Strillo 2011-12-13 17:59:20

+1

@Morten提出的方法應該爲你解決。您的失敗可能是由於刪除了更改集(http://msdn.microsoft.com/zh-cn/library/bb386005.aspx)。我會標記失敗的人,並在Source Control Explorer中查看他們的特別之處。 – pantelif 2011-12-14 08:56:01

回答

25

嘗試這種情況:

// Replace with your setup 
    var tfsServer = @"http://tfsserver:8080/tfs/SW"; 
    var serverPath = @"$/PCSW/ProjectX/Main"; 

    // Connect to server 
    var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(tfsServer)); 
    tfs.Connect(ConnectOptions.None); 
    var vcs = tfs.GetService<VersionControlServer>(); 

    // Create versionspec's. Example start with changeset 529 
    VersionSpec versionFrom = VersionSpec.ParseSingleSpec("C529", null); 
    // If you want all changesets use this versionFrom: 
    // VersionSpec versionFrom = null; 
    VersionSpec versionTo = VersionSpec.Latest; 

    // Get Changesets 
    var changesets = vcs.QueryHistory(
    serverPath, 
    VersionSpec.Latest, 
    0, 
    RecursionType.Full, 
    null, 
    versionFrom, 
    versionTo, 
    Int32.MaxValue, 
    true, 
    false 
    ).Cast<Changeset>(); 
1

在情況下,它僅在需要的是,範圍變更集數,可以使用下面的代碼。

foreach (var changeset in changesets) 
{ 
    Console.WriteLine(changeset.ChangesetId); 
}