Azure DevOps同组织跨项目迁移工作项报VS403417错误咨询
错误原因
你遇到的报错核心信息为:
Microsoft.TeamFoundation.WorkItemTracking.Client.UnexpectedErrorException: 服务器发生异常,请联系Azure DevOps Server管理员。---> System.Web.Services.Protocols.SoapException: VS403417: 指定BypassRules参数时,ChangedBy字段值不能为空
这个报错是Azure DevOps接口的规则校验返回:当调用工作项写入接口时如果传了BypassRules=true参数(用于绕过流程规则强制修改系统字段,比如创建时间、创建人),必须同时给System.ChangedBy(修改人)字段传入有效值,不能留空。
结合你使用的12.0.3版本迁移工具、贴出的配置,以及同组织同模板迁移的场景,报错由三个配置问题叠加触发:
- 你只开启了
UpdateCreatedDate、UpdateCreatedBy两个创建元数据更新开关,没有开启对应的UpdateChangedBy、UpdateChangedDate开关,工具回放工作项历史修订时不会主动填充ChangedBy字段值。 - FieldMaps配置里残留了测试用的空
FieldtoFieldMultiMapConfig块,只有占位用的SourceField1/TargetField1无效映射,会打断正常的字段取值流程,导致工具拿不到源端的ChangedBy值。 - 你开启了
SkipToFinalRevisedWorkItemType: true,这个参数是为跨不同流程模板迁移的场景设计的,12.0.3版本在同模板迁移场景下开启该参数,会触发已知bug,直接跳过历史修订中ChangedBy字段的传参步骤。
修复步骤
按以下顺序调整配置即可解决问题:
- 找到
Processors数组下的WorkItemMigrationConfig节点,补全两个缺失的修改元数据更新开关:
"UpdateCreatedDate": true, "UpdateCreatedBy": true, "UpdateChangedDate": true, "UpdateChangedBy": true,
- 删除FieldMaps数组中无效的占位配置块,也就是下面这段没有实际映射逻辑的内容,避免干扰正常字段映射:
{ "$type": "FieldtoFieldMultiMapConfig", "WorkItemTypeName": "*", "SourceToTargetMappings": { "SourceField1": "TargetField1", "SourceField2": "TargetField2" } },
- 将同节点下的
SkipToFinalRevisedWorkItemType参数值从true改为false。你的源和目标项目使用完全相同的流程模板,不需要这个跨模板兼容逻辑,关闭后即可避开12.0.3版本的字段漏传bug。 - 确认Source和Target节点中的
PersonalAccessToken已填入有效值:PAT需要勾选工作项“读取、写入和管理”权限范围,且对应账号在目标项目中拥有“绕过规则更新工作项”的权限(默认项目管理员组拥有该权限)。 - 修正附件临时路径的转义问题,将
AttachmentWorkingPath的值改为"c:\\temp\\WorkItemAttachmentWorkingFolder\\",避免后续迁移附件时触发路径非法错误。
迁移验证
配置修改完成后,先在WorkItemMigrationConfig节点的WorkItemIDs参数中填入单个测试工作项ID(格式为[123],123替换为源项目内任意一个有效工作项ID),执行单工作项迁移测试,确认无报错后,再清空WorkItemIDs参数执行全量迁移即可。
内容的提问来源于stack exchange,提问作者user14315777
相关产品推荐
相关产品推荐

