workitem.open() KeyNotFoundException TFS 2013
Я застрял с этим исключением "Указанный ключ не присутствовал в словаре", который указывает, что какое-то значение не было найдено в словаре, но странно то, что я не использую какой-либо словарь, я думаю, что это некоторый внутренний код API TFS C#. Вот часть кода, вызывающая исключение:
if (wi.Validate().Count == 0)
{
// Save the work item to submit changes
wi.Save();
}
else
{
Console.WriteLine("following errors was encountered when trying to save the work item {0} : ", id);
foreach (var e in wi.Validate())
{
Console.WriteLine(" - '{0} '", e);
}
}
// Close the work item
wi.Close();
// Submit the changes to the database
SubmitChangesToDatabase(id, author, statusChanged, previousChangeTime);
// Open again the work item to go on with other updates
wi.Open();
Этот код является частью цикла, где я получаю рабочий элемент, выполняю некоторые обновления с использованием API TFS, после чего я изменяю поля только для чтения непосредственно в базе данных, используя метод SubmitChangesToDatabase. Исключение возникает при вызове метода Open (). Трассировка стека выглядит следующим образом:
System.Collections.Generic.KeyNotFoundException was unhandled
HResult=-2146232969
Message=The given key was not present in the dictionary.
Source=mscorlib
StackTrace:
at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
at Microsoft.TeamFoundation.WorkItemTracking.Internals.WorkItemHelper.FindRevisionIndexByDate(Int32 trackTimeFieldId, List`1 revisions, Dictionary`2 latestData, DateTime dt, Int32 startIndex)
at Microsoft.TeamFoundation.WorkItemTracking.Internals.WorkItemHelper.LoadWorkItemFieldData(IRowSetCollectionHelper tables, IWorkItemOpenFieldDataHelper helper)
at Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem.LoadWorkItemFromRowSetInternal(Int32 rev, Nullable`1 asof, IWorkItemRowSets witem)
at Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem.LoadWorkItem(Int32 id, Int32 rev, Nullable`1 asof)
at Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem.Open()
at CSVToTFS.TFSServer.SetWorkItemHistory(Int32 id, DataTable ticketChange) in d:\Documents\Visual Studio 2013\Projects\TFS\CSVToTFS\TFSServer.cs:line 253
at CSVToTFS.Program.Main(String[] args) in d:\Documents\Visual Studio 2013\Projects\TFS\CSVToTFS\Program.cs:line 173
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
1 ответ
У меня было это раньше, когда мой командный проект был настроен на использование Team Field вместо Aeea Path. Если вы изменили это, а для некоторых рабочих элементов еще не указана команда, вы получите эту ошибку.
Если вы создаете запрос с параметром "yourteamfield.team", для которого задано пустое значение, и массово обновите все рабочие элементы, чтобы получить значение, ошибка должна исчезнуть.