在使用条件断点时立即获取“无法评估安全功能”

时间:2017-07-07 03:58:45

标签: c# .net .net-core

在开发.NET Core 2.0应用程序时,我遇到了条件断点,监视评估和即时窗口评估的问题。我收到以下错误:

  

modifiers.GroupBy(c => c.Modifier.Group).ToList()
         抛出了'System.ArgumentException'类型的异常           数据:{System.Collections.ListDictionaryInternal}
          HResult:-2147024809
          HelpLink:null
          InnerException:null
          消息:“无法评估安全功能。”
          ParamName:null
          来源:null
          StackTrace:null
          TargetSite:null

可能导致此问题的原因是什么?有解决方法吗?这在.NET Framework 4.x应用程序中运行良好。

修改:添加代码示例

使用以下课程:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Group { get; set; }
}

在正常的控制台应用程序中,以.NET Core 2.0为目标:

static void Main(string[] args)
{
    var people = new List<Person>
    {
        new Person { Age = 17, Name = "Person A", Group = "Group A" },
        new Person { Age = 20, Name = "Person B", Group = "Group A" },
        new Person { Age = 23, Name = "Person C", Group = "Group A" },
        new Person { Age = 17, Name = "Person D", Group = "Group B" },
        new Person { Age = 25, Name = "Person E", Group = "Group B" },
        new Person { Age = 40, Name = "Person F", Group = "Group B" },
    };
    // Make sure that System.Linq gets loaded
    people.Where(c => c.Name == "Person A").First();
}

List<Person>初始化后设置断点。在即时窗口中,尝试评估GroupByWhere这不是一个简单的相等检查,它会抛出ArgumentException,并显示消息“不能评估安全功能。“

有几个例子:

people.Where(c => c.Name.Contains("F")).ToList()

people.GroupBy(c => c.Group).ToList()

注意:监视语句似乎在Visual Studio Code中有效,但在Visual Studio 2017 Preview 3中则无效。

1 个答案:

答案 0 :(得分:7)

该错误似乎是由于即时窗口不允许任何可能引起副作用。通常在即时窗口中允许副作用...但它不喜欢GroupBy上的List<T>GroupBy T[]可以容忍)

我使用你的例子进行了再现。

people.GroupBy(c => c.Group).ToList()抛出了 people.Where(c => c.Name.Contains("F")).ToList()没有。

需要条件断点。我的测试是使用全新的.net核心2.0项目调试任何CPU构建。这是VS Pro 2017 v15.3.1的稳定版本

要解决此问题,请将列表副本复制到数组中:

people.ToArray().GroupBy(c => c.Group).ToList()

我还建议向MS提交错误报告。