使用条件断点和即时窗口时获取"Cannot evaluate a security function"



开发 .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>后设置断点。在即时窗口中,尝试评估不是简单相等性检查的GroupByWhere,它将抛出一个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提交错误报告。

相关内容

最新更新