有很多示例展示了如何获取当前TFS用户的列表,但是如何获取过去曾提交但不再属于任何安全组的旧用户列表?
对于记录,这是我用来查找所有当前用户的代码:
var gss = tfs.GetService<IGroupSecurityService>();
var members = gss.ReadIdentity(SearchFactor.EveryoneApplicationGroup,
null,
QueryMembership.Expanded).Members;
return gss.ReadIdentities(SearchFactor.Sid, members, QueryMembership.None)
.Where(identity => identity != null &&
identity.Type == IdentityType.WindowsUser)
.Select(identity => string.Format(@"{0}\{1}",
identity.Domain,
identity.AccountName));
答案 0 :(得分:1)
我无法提供确切的答案,但希望这会有所帮助......
您可以通过工作区列出所有挂起的更改(即tf.exe workspaces命令和等效的apis)。使用每个工作区的所有者使用未提交的更改,您应该能够与您已经拥有的活动用户列表进行交叉引用。
答案 1 :(得分:0)
以下代码段应显示您在TeamCollection存储库中曾提交更改的每个人:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.VersionControl.Client;
namespace PeopleWhoHaveCommitedChangesets
{
class Program
{
static void Main()
{
TfsTeamProjectCollection tpc = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://TFSServer:8080"));
VersionControlServer vcs = (VersionControlServer) tpc.GetService(typeof (VersionControlServer));
IEnumerable results = vcs.QueryHistory(@"$/",
VersionSpec.Latest, 0, RecursionType.Full, null, null, null, int.MaxValue, true, true);
List<Changeset> changesets = results.Cast<Changeset>().ToList();
List<string> Users = new List<string>();
foreach (var changeset in changesets)
{
if(!Users.Contains(changeset.Owner))
{
Users.Add(changeset.Owner);
}
}
}
}
}
请注意,这是一种蛮力,并且,如果有很多变更集,则需要相当长的时间才能执行。