2011-12-13 91 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); 
}