Подтвердить что ты не робот

Получение "Невозможно оценить функцию безопасности" при использовании условных точек останова и в непосредственном окне

При разработке приложений .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; }
}

В обычном консольном приложении, ориентированном на .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.

4b9b3361

Ответ 1

Эта ошибка, по-видимому, связана с тем, что немедленное окно не разрешает ничего, что может вызвать побочные эффекты. Обычно побочные эффекты разрешены в непосредственном окне... но ему не нравится GroupBy on List<T> (пока GroupBy on T[] допускается)

Я воспроизвел, используя ваш пример.

people.GroupBy(c => c.Group).ToList() throws
people.Where(c => c.Name.Contains("F")).ToList() нет.

Это не требовало условной точки останова. Мой тест был с новым проектом .net core 2.0 Debug Любой процессор. Это был стабильный выпуск VS Pro 2017 v15.3.1

Чтобы обойти эту проблему, сделайте копию своего списка в массив:

people.ToArray().GroupBy(c => c.Group).ToList()

Я также рекомендую подать отчет об ошибке с помощью MS.