C# 获得;无法评估安全功能“;在即时窗口中使用条件断点时
在开发.NETCore2.0应用程序时,我遇到了条件断点、监视计算和即时窗口计算的问题。我收到以下错误:C# 获得;无法评估安全功能“;在即时窗口中使用条件断点时,c#,.net,.net-core,C#,.net,.net Core,在开发.NETCore2.0应用程序时,我遇到了条件断点、监视计算和即时窗口计算的问题。我收到以下错误: modifiers.GroupBy(c=>c.Modifier.Group.ToList() 引发了类型为“System.ArgumentException”的异常 数据:{System.Collections.ListDictionaryInternal} HResult:-2147024809 帮助链接:空 InnerException:null 消息:“无法评估安全功能。” Param
modifiers.GroupBy(c=>c.Modifier.Group.ToList()
引发了类型为“System.ArgumentException”的异常
数据:{System.Collections.ListDictionaryInternal}
HResult:-2147024809
帮助链接:空
InnerException:null
消息:“无法评估安全功能。”
ParamName:null
来源:空
StackTrace:null
TargetSite:null
什么可能导致此问题?有解决办法吗?这在.NETFramework4.x应用程序中运行良好
编辑:添加代码示例 使用以下类: 在普通控制台应用程序中,以.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();
}
注意:监视语句似乎在Visual Studio代码中有效,但在Visual Studio 2017 Preview 3中无效。该错误似乎是由于即时窗口不允许任何可能导致副作用的内容。通常在即时窗口中允许出现副作用。。。但是它不喜欢
List
上的GroupBy
(而T[]
上的GroupBy
是允许的)
我用你的例子复制了
people.GroupBy(c=>c.Group.ToList()
throwspeople.Where(c=>c.Name.Contains(“F”)).ToList()不包含
它不需要条件断点。我的测试是使用全新的.NETCore2.0项目调试任何CPU构建。这是VS Pro 2017 v15.3.1的稳定版本
要解决此问题,请将列表复制到数组中:
people.ToArray().GroupBy(c=>c.Group.ToList()
我还建议您向女士提交一份bug报告。您是否有允许重现该问题的示例代码?添加了示例代码和一些注释。谢谢异常是在哪一行抛出的?@fabric异常是在watch和immediate窗口中抛出的。这篇文章中有两个例子。同样,我报告了VS社区的错误。我无法将任何函数计算到调试器中,只能计算变量,这很烦人……它在.NETFramework4.6中工作,但在.NETCore中不工作。“恐怕我不相信你是对的。”安德烈安德森也许我误解了。让我重申我认为正在发生的事情。在.NETFramework4.6中,正如您所提到的,您可以使用即时窗口而不会出现问题。在.NET Core 2.0项目中,键入people.GroupBy(c=>c.Group).ToList()
时会遇到“Cannot evaluate…”错误,但如果改为键入people.ToArray().GroupBy(c=>c.Group).ToList()
,则不会抛出错误。这是正确的吗?好的,很好。所以现在我很困惑,为什么您不相信List.GroupBy()
vsT[].GroupBy()
只在.netcore2.0
中,而不是在.netframework4.6
中,才是“潜在副作用”(这是安全错误的原因)的原因?我的假设是,List
的两个实现之间的一些元数据不同,IDE会停止计算,因为它认为它可能会改变数据(即使在即时窗口中通常允许数据改变)——可能是因为优化或堆栈修改
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();
}
people.Where(c => c.Name.Contains("F")).ToList()
people.GroupBy(c => c.Group).ToList()