C# TFS API未返回实际值

C# TFS API未返回实际值,c#,tfs-sdk,C#,Tfs Sdk,我正在使用TFSAPI用C应用程序检查现有工作项的有效性。我知道某个WI——从工作项UI中可以看出是无效的,有几个字段缺少值或值无效。但是,下面调用workitem.Validate方法的代码返回0,或者没有无效字段。如果遍历字段列表并使用field.IsValid属性逐个检查每个字段,则会得到相同的结果。即使字段isValid的值实际上为false,它也始终返回true 有趣的是,如果我在调用行之前停止调试器,并将Autos窗口VS 2012中的workitem展开到我知道无效的字段之一,那么

我正在使用TFSAPI用C应用程序检查现有工作项的有效性。我知道某个WI——从工作项UI中可以看出是无效的,有几个字段缺少值或值无效。但是,下面调用workitem.Validate方法的代码返回0,或者没有无效字段。如果遍历字段列表并使用field.IsValid属性逐个检查每个字段,则会得到相同的结果。即使字段isValid的值实际上为false,它也始终返回true

有趣的是,如果我在调用行之前停止调试器,并将Autos窗口VS 2012中的workitem展开到我知道无效的字段之一,那么我可以让方法返回invalid/false,从而看到isValid属性实际上是false。如果在调试期间未打开此属性,则该值始终返回true

有什么想法吗?这感觉好像有些东西没有正确加载,但我得到了一个干净的编译和构建

谢谢你的帮助

TfsTeamProjectCollection teamProjectCollection = new TfsTeamProjectCollection(collectionUri);

WorkItemStore workItemStore = teamProjectCollection.GetService<WorkItemStore>();

WorkItemCollection hyperWic = workItemStore.Query("select [system.id] from workitems where [system.id] = "---");

foreach (WorkItem wi in hyperWic)
{
    ArrayList wi_Validate = wi.Validate();

    if (wi_Validate.Count > 0)
    {
        outputTextBox.Text += "Work item field is invalid" + Environment.NewLine;
    }
}

此代码适用于me TFS 2013:

public static bool ValidateAndSave(this WorkItem wit)
{
    bool valid = wit.IsValid();
    if (valid)
    {
        wit.Save();
    }
    else
    {
        string msg = "Error saving work item, validation failed ! Errors: " + Environment.NewLine;
        foreach (var field in wit.Validate().Cast<Field>())
        {
            msg += "Field " + field.Name + " has status " + field.Status + Environment.NewLine;
        }
        EventLog.WriteEntry("WemTfsSubSystem", msg);
    }
    return valid;
}
为未来读者更新:


本例中的问题是,WorkItem是通过WorkItemStore查询获得的,这可能是由于缓存问题,所以解决方案是通过WorkItemStore.GetWorkItemid方法获得WorkItem。

感谢您的回复。我用相同的原始结果运行了您的代码。IsValid调用返回true,即使有几个字段无效。当我在调用之前展开变量时,调试器仅给出false。TFS版本是什么?TFS Server 2012,运行VS 2012。Save方法保存工作项还是引发异常?它引发异常,确认工作项无效。