在使用条件断点和立即窗口时获取"无法评估安全功能"

And*_*sen 21 .net c# .net-core

在开发.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; }
}
Run Code Online (Sandbox Code Playgroud)

在正常的控制台应用程序中,以.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();
}
Run Code Online (Sandbox Code Playgroud)

初始化后设置断点List<Person>.在即时窗口中,尝试评估一个GroupBy或一个Where不是简单的等式检查,它将抛出一条ArgumentException消息"无法评估安全功能".

几个例子是:

people.Where(c => c.Name.Contains("F")).ToList()

people.GroupBy(c => c.Group).ToList()
Run Code Online (Sandbox Code Playgroud)

注意: watch语句似乎在Visual Studio Code中有效,但在Visual Studio 2017 Preview 3中没有.

Gra*_*ted 7

该错误似乎是由于即时窗口不允许任何可能导致副作用的窗口.通常的副作用被允许在即时窗口...但它不喜欢GroupByList<T>(而GroupByT[]是可以容忍的)

我用你的例子再现了.

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提交错误报告.