【问题标题】:Updating a Hyperlink of a WorkItem with TFS SDK使用 TFS SDK 更新 WorkItem 的超链接
【发布时间】:2014-07-01 10:03:50
【问题描述】:

我必须更新在 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.

我该如何解决这个问题?

【问题讨论】:

    标签: c# tfs hyperlink tfs-sdk


    【解决方案1】:

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

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

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

    【讨论】:

    • 哦忘了,谢谢。但现在我看到 Location 属性是只读的。还有其他方法可以更新吗?
    • 我在听从您的建议后提出的问题中添加了一个问题。
    • 您不能通过您从中删除项目的集合foreach。枚举器将抛出集合已更改的此异常。
    • 所以你需要保留 2 个列表,一个要删除的项目,一个要添加的项目,然后执行操作。
    猜你喜欢
    • 2011-11-18
    • 1970-01-01
    • 2015-03-14
    • 2020-04-21
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    相关资源
    最近更新 更多