如何用C#编程移除TFS组成员?遇TF50621错误求助
解决TFS编程移除用户时的TF50621错误
错误原因
TF50621错误表明,你要操作的组不属于TEAM FOUNDATION(服务器级)宿主,而是归属于项目集合或具体项目级宿主。当前代码默认以服务器级上下文读取组,导致宿主不匹配,触发错误。
修正方案
方法1:指定组的宿主ID(项目集合/项目)
读取组时必须明确指定其所属的宿主ID,比如项目集合ID或项目ID,代码调整如下:
bool isError = false; // 假设已初始化项目集合实例 TfsTeamProjectCollection tpc IIdentityManagementService2 ims2 = tpc.GetService<IIdentityManagementService2>(); // 获取目标用户 TeamFoundationIdentity memberId = ims2.ReadIdentity( IdentitySearchFactor.DisplayName, id.DisplayName, MembershipQuery.Expanded, ReadIdentityOptions.None); // 获取项目集合ID(若组为项目集合级) Guid hostId = tpc.InstanceId; // 若组为项目级,需先获取项目ID: // TeamProjectService projectService = tpc.GetService<TeamProjectService>(); // Guid hostId = projectService.GetTeamProject("目标项目名").TeamProjectId; // 读取组时指定宿主 TeamFoundationIdentity groupId = ims2.ReadIdentity( IdentitySearchFactor.AccountName, "Confidential Group", MembershipQuery.None, ReadIdentityOptions.None, hostId, out bool isGroup); if (groupId == null || !isGroup) { isError = true; } if (memberId == null) { isError = true; } if (!isError) { ims2.RemoveMemberFromApplicationGroup(groupId.Descriptor, memberId.Descriptor); }
方法2:通过项目URI指定宿主
如果组属于具体项目,可使用项目URI作为宿主标识读取组:
// 假设已初始化项目集合实例 TfsTeamProjectCollection tpc IIdentityManagementService2 ims2 = tpc.GetService<IIdentityManagementService2>(); // 获取目标项目URI TeamProjectService projectService = tpc.GetService<TeamProjectService>(); Uri projectUri = projectService.GetTeamProject("目标项目名").Uri; // 获取目标用户 TeamFoundationIdentity memberId = ims2.ReadIdentity( IdentitySearchFactor.DisplayName, id.DisplayName, MembershipQuery.Expanded, ReadIdentityOptions.None); // 读取项目级组 TeamFoundationIdentity groupId = ims2.ReadIdentity( IdentitySearchFactor.AccountName, "Confidential Group", MembershipQuery.None, ReadIdentityOptions.None, projectUri, out bool isGroup); // 移除成员逻辑同前 if (groupId != null && isGroup && memberId != null) { ims2.RemoveMemberFromApplicationGroup(groupId.Descriptor, memberId.Descriptor); }
核心注意事项
- 区分组的级别:服务器级、项目集合级、项目级组分别对应不同的宿主,必须匹配对应上下文操作
- 读取组时必须传入正确的宿主标识(ID或URI),否则会出现宿主不匹配错误
- 可通过
TfsTeamProjectCollection.InstanceId获取项目集合ID,通过项目服务获取项目ID或URI
内容的提问来源于stack exchange,提问作者anilmertgoktas
相关产品推荐
相关产品推荐

