在开发.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>
初始化后设置断点。在即时窗口中,尝试评估GroupBy
或Where
这不是一个简单的相等检查,它会抛出ArgumentException
,并显示消息“不能评估安全功能。“
有几个例子:
people.Where(c => c.Name.Contains("F")).ToList()
people.GroupBy(c => c.Group).ToList()
注意:监视语句似乎在Visual Studio Code中有效,但在Visual Studio 2017 Preview 3中则无效。
答案 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提交错误报告。