开发 .NET Core 2.0 应用程序时,我在条件断点、监视评估和即时窗口评估方面遇到了问题。我收到以下错误:
modifiers.GroupBy(c => c.Modifier.Group).ToList()
抛出类型为"System.ArgumentException">
Data的异常:{System.Collections.ListDictionaryInternal}
HResult:-2147024809
HelpLink:null
InnerException: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中不起作用。
该错误似乎是由于即时窗口不允许任何可能导致副作用的内容。 通常在即时窗口中允许副作用...但它不喜欢List<T>
GroupBy
(而T[]
GroupBy
是可以容忍的(
我用你的例子复制了。
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提交错误报告。