You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 13:25:19