C# 通过编程强制TFS工作项的字段值

C# 通过编程强制TFS工作项的字段值,c#,tfs,tfs-sdk,workitem,C#,Tfs,Tfs Sdk,Workitem,我正在编写一个实用程序来读取遗留缺陷跟踪系统中的所有缺陷,并将它们导入TFS(2008/2010)。我正在使用TFSAPI创建新的工作项,设置它们的字段,然后保存它们。但是,我无法修改“创建人”和“创建日期”字段,因为这些字段是由系统设置的。(还有其他一些字段,我希望能够为其强制设置值,例如将提交者设置为不是有效TFS用户的人) 很明显,如果我不能设置这些字段,我将得到所有遗留错误,看起来它们是由同一个人在同一天创建的 有没有一种方法可以使用API但强制更改通常受保护的字段?我已经研究过直接访问

我正在编写一个实用程序来读取遗留缺陷跟踪系统中的所有缺陷,并将它们导入TFS(2008/2010)。我正在使用TFSAPI创建新的工作项,设置它们的字段,然后保存它们。但是,我无法修改“创建人”和“创建日期”字段,因为这些字段是由系统设置的。(还有其他一些字段,我希望能够为其强制设置值,例如将提交者设置为不是有效TFS用户的人)

很明显,如果我不能设置这些字段,我将得到所有遗留错误,看起来它们是由同一个人在同一天创建的


有没有一种方法可以使用API但强制更改通常受保护的字段?我已经研究过直接访问TFS数据库表,但是架构看起来很复杂,我认为自己尝试修改其中的数据是相当危险的。

只是一个建议:迁移时在工作项描述的开头插入以下文本:

  • 从系统XXX迁移
  • 原始创建日期:2012年1月1日
  • 原创者:John Doe

如果您是一个服务帐户,并且打开了旁路规则功能,则允许您设置创建日期和创建人字段

使用以下标志创建
WorkItemStore
类的实例时,可以选择绕过规则:
workitemstorefags.BypassRules


请注意,您只允许在第一次修订工作项时设置这些字段。

是的,如果我根本无法修改创建的日期,我会这样做,但这将意味着人们无法使用他们在旧系统中习惯的查询。谢谢,这听起来正是我所需要的。我会尝试一下,并将其标记为答案,如果我能让它工作,你知道这个标志是否是TFS 2012的新标志吗?它不在以前版本的库中。我一直在尝试这个,它有点奇怪。首先,不能在第一次保存时设置这些字段,只能在后续保存时设置。其次,它不允许我更改System.CreatedBy,即使我可以使用此技术更改System.CreatedDate和Microsoft.VSTS.Common.ActivateDate。创建的
在第一次修订后不能像您所说的那样更改。(错误:TF26194:无法更改字段“创建人”的值)对此有解决方案吗?
// these fail with "The value for the field 'Created By' cannot be changed."
defectWorkItem.Fields["Created By"].Value = defect.Submitter;
defectWorkItem.Fields["Created Date"].Value = defect.SubmitDate;