2014-07-01 6 views
2

TFS의 WorkItem에 추가 된 하이퍼 링크에서 일부 호스트 이름을 업데이트해야합니다.TFS SDK를 사용하여 WorkItem의 하이퍼 링크 업데이트

내 생각은 다음과 같이이었다 :

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(); 

을하지만 불행하게도이 위치 속성이 있기 때문에 읽기 전용이 작동하지 않습니다.

다른 방법으로 업데이트 할 수 있습니까?

편집 :

지금 내가 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. 

가 어떻게이 문제를 해결할 수 있습니까?

답변

3

.Replace은 새 문자열을 반환하지만 기존 값은 그대로 유지하는 경향이 있습니다. 당신이 결과를 가지고해야합니다 그래서 :

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

그러나 .Location 이후

읽기 전용이 이전 링크를 제거하고

+0

아 그것에 대해 잊고 위치를 업데이트하려면 새로 만들어야합니다, 고맙습니다. 하지만 이제 Location 속성이 ReadOnly임을 알 수 있습니다. 그것을 업데이트하는 또 다른 방법이 있습니까? –

+0

귀하의 조언을 따른 후에 제기 된 질문에 문제가 추가되었습니다. –

+2

항목을 제거한 모음을 'foreach'할 수 없습니다. 열거자는 컬렉션이 변경된이 예외를 throw합니다. – jessehouwing