我必须更新添加到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.
我该如何解决这个问题?
答案 0 :(得分:3)
.Replace
倾向于返回一个新字符串,但不会更新现有值。所以你需要得到结果:
link.Location = link.Location.Replace("oldHostname", "newHostname");
但由于.Location
是只读的,因此您必须删除旧链接并创建一个新链接以更新位置