非托管代码中的ASP Net Core 1.1和EF 6异常?

Ada*_*one 16 .net c# entity-framework asp.net-core-mvc asp.net-core

好吧,这是一个非常怪异的问题,刚刚开发出来,对于我的生活,我不知道从哪里开始.

出于某种原因,我在EF 6中遇到了致命的错误,但这种情况只发生在我转换为.NET Core 1.1之后.这个应用程序在ASP.Net MVC 4上运行没有问题.

我不眠之夜的原因

对于搜索引擎:

托管调试助手'FatalExecutionEngineError': '运行时遇到了致命错误.错误的地址是0x77c81a09,位于线程0x2520.错误代码是0xc0000005.此错误可能是CLR中的错误,也可能是用户代码的不安全或不可验证部分中的错误.此错误的常见来源包括COM-interop或PInvoke的用户封送错误,这可能会破坏堆栈.```

从我在网上找到的,这是.NET的托管环境之外的问题....这意味着我只是羞于无知.

第一次遇到这个错误时,一个简单的Clean和Build将它固定了一会儿,然后又在同一个地方再次出现.

到目前为止,我在两个地方看到过这个错误:

var vm = new ManagerLogIndexViewModel()
{
    Locations = await _db.Locations.ToListAsync(),
};
Run Code Online (Sandbox Code Playgroud)

而且(虽然更复杂):

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());
Run Code Online (Sandbox Code Playgroud)

它可能与某些事情有关async吗?

还有其他实体框架调用,一切正常,即使使用异步操作符也是如此.

即使是第一个例子也是在Clean和Build之后工作的.

我真的不知所措.我读过它可能与环境有关.目前,我没有其他可供测试的环境,只有我的开发机器.如果我在另一台机器上运行这个,我会尝试稍后更新.


我在发布之前做了另一个测试:

如果我单步执行代码(第一个示例),一切都按预期工作.

停止.删除断点.开始.崩溃.

这让我兴奋不已.


更新

好像这不会变得更加陌生,每次启动时都不会发生此错误.

我会说大约60/40支持崩溃.当它运行(并且第一个查询通过)时,我对进程的生命周期没有任何问题.

另一个更新

看起来这是孤立的在IIS Express下运行.如果我以独立的方式运行应用程序,我就无法发生崩溃.


一些技术位:

  • ASP.Net核心1.1
  • .NET 4.5.2
  • Windows 7 SP1
  • EF 6.1.3

关闭编辑

为了这个线程的完整性(因为此时有几个线程),@ gregg-miskelly提供的解决方法(由@SwampyFox提交给SO)确实有效.该错误已提交给MS,应在将来的.NET Framework版本中修复.

讨论发生在coreclr GitHub页面上

Swa*_*Fox 14

根据github上的OP帖子,ASP 6.1.3在ASP.Net Core MVC#10717中使用FatalExecutionEngineError崩溃IIS Express,这是框架中的崩溃.

通过打开ETW GC内存跟踪触发崩溃.

要解决此问题,您可以尝试在Visual Studio中关闭ETW GC内存跟踪.

  1. 打开工具 - >选项
  2. 在搜索栏中输入"诊断工具"
  3. 在"调试常规"部分下,取消选中"在调试时启用诊断工具".