C# 获得;无法评估安全功能“;在即时窗口中使用条件断点时

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

在开发.NETCore2.0应用程序时,我遇到了条件断点、监视计算和即时窗口计算的问题。我收到以下错误:

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()
throws
people.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()
vs
T[].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()