使用TFS SDK更新工作项的超链接

时间:2014-07-01 10:03:50

标签: c# tfs hyperlink tfs-sdk

我必须更新添加到TFS中的WorkItems的超链接中的一些主机名。

我的想法是这样的:

TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(new Uri("http://mytfs"));
WorkItemStore wis = tfs.GetService<WorkItemStore>();
WorkItem wi = wis.GetWorkItem(12345);
foreach (Hyperlink link in wi.Links.OfType<Hyperlink>())
{
    link.Location = link.Location.Replace("oldHostname", "newHostname");
}
wi.Save();

但不幸的是,这不起作用,因为Location属性是只读的。

还有其他方法可以更新吗?

编辑:

现在我正在尝试删除旧的并将新的超链接添加到WorkItem,但是当下面的foreach循环第二次启动时出现错误。

TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(new Uri("http://mytfs"));
WorkItemStore wis = tfs.GetService<WorkItemStore>();

WorkItem wi = wis.GetWorkItem(14612);

foreach (Hyperlink hyperlink in wi.Links.OfType<Hyperlink>())
{
    if (hyperlink.Location.Contains("oldHostname"))
    {
        Hyperlink newHyperlink = new Hyperlink(hyperlink.Location.Replace("oldHostname", "newHostname"));
        wi.Links.Remove(hyperlink);
        wi.Links.Add(newHyperlink);
    }
}
if(wi.isDirty()) wi.Save();

标记包含foreach的行,错误为:

An unhandled exception of type 'System.InvalidOperationException' occurred in Microsoft.TeamFoundation.WorkItemTracking.Client.dll
Additional information: Operation is not valid due to the current state of the object.

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

.Replace倾向于返回一个新字符串,但不会更新现有值。所以你需要得到结果:

link.Location = link.Location.Replace("oldHostname", "newHostname");

但由于.Location是只读的,因此您必须删除旧链接并创建一个新链接以更新位置