Хорошо, это действительно причудливая проблема, которая только что сложилась, и для жизни меня я не знаю, с чего начать.
По какой-то причине я получаю фатальную ошибку где-то в EF 6, но это произошло только после того, как я конвертировал в .NET Core 1.1. Это приложение запускалось без проблем в ASP.Net MVC 4.
Для поисковых систем:
Помощник по удаленной отладке "FatalExecutionEngineError": 'Среда выполнения столкнулась с фатальной ошибкой. Адрес ошибки был равен 0x77c81a09, на потоке 0x2520. Код ошибки: 0xc0000005. Эта ошибка может быть ошибкой в CLR или в небезопасных или не поддающихся проверке частях кода пользователя. Общие источники этой ошибки включают ошибки маршалинга пользователя для COM-interop или PInvoke, которые могут повредить стек. `` `
Из того, что я могу найти в Интернете, это проблема вне управляемой среды .NET. Это означает, что я просто стесняюсь невежественности.
В первый раз, когда я был поражен этой ошибкой, простая "Чистая" и "Сборка" фиксировали ее на некоторое время, затем она снова появилась в том же месте.
Я видел эту ошибку в двух местах:
var vm = new ManagerLogIndexViewModel()
{
Locations = await _db.Locations.ToListAsync(),
};
И (хотя и сложнее):
var results = await _db.InvolvedPersons
.Where(
x =>
x.LastName.ToUpper().Contains(q) || x.FirstName.ToUpper().Contains(q) ||
(x.FirstName + " " + x.LastName).ToUpper().Contains(q))
.Select(x => new {x.FirstName, x.LastName, x.Id})
.GroupBy(x => x.LastName + " " + x.LastName)
.Select(x => x.FirstOrDefault())
.ToDictionaryAsync(x => x.FirstName + " " + x.LastName, x => x.Id.ToString());
Может ли это иметь какое-то отношение к async
?
Существуют другие вызовы Entity Framework, где все работает нормально, даже с оператором async.
Даже первый пример работал после Clean и Build.
Я действительно в недоумении, что делать. Я читал, что это может иметь какое-то отношение к окружающей среде. На данный момент у меня нет альтернативных условий для тестирования, только моя машина dev. Я попытаюсь обновить его позже, если я закрою его на альтернативной машине.
Я только что сделал еще один тест перед публикацией:
Если я пройду через код (первый пример), все будет работать по назначению.
Стоп. Удалить точку останова. Начало. Краш.
Это подталкивает меня к стене.
Обновление
Как будто это не может стать намного более странным, эта ошибка не возникает при каждом запуске.
Я бы сказал, что около 60/40 в пользу крушения. Когда он запускается (и первый запрос проходит), у меня нет проблем для времени жизни процесса.
Другое обновление
Похоже, он изолирован от работы под IIS Express. Если я запускаю приложение автономно, я не смог выполнить сбой.
Еще несколько технических бит:
- ASP.Net Core 1.1
- .NET 4.5.2
- Windows 7 SP1
- EF 6.1.3
Закрытие Редактировать
Для полноты этой темы (поскольку в этой точке есть несколько потоков), обходной путь, предоставляемый @gregg-miskelly (и представленный SO by @SwampyFox), действительно работает. Ошибка была отправлена в MS и должна быть исправлена в будущей версии .NET Framework.
Обсуждение состоялось на странице coreclr GitHub