好的,这是一个刚刚发展起来的怪异问题,对于我的生活,我不知道从哪里开始。
出于某种原因,我在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(),
};
而且(虽然更复杂):
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
有关吗?
还有其他实体框架调用,即使使用异步操作符,一切正常。
即使是第一个例子也在Clean and Build之后起作用。
我真的不知所措。我读过它可能与环境有关。目前,我没有其他可供测试的环境,只有我的开发机器。如果我在备用计算机上启动此操作,我将尝试稍后更新。
我在发布之前刚做了另一个测试:
如果我单步执行代码(第一个示例),一切都按预期工作。
停止。删除断点。开始。崩溃。
这让我感到困惑。
更新
好像这不会变得更加陌生,每次启动时都不会发生此错误。
我说它大约60/40支持崩溃。当它运行(并且第一个查询通过)时,我对该过程的生命周期没有任何问题。
另一次更新
看起来这是隔离到在IIS Express下运行。如果我以独立的方式运行应用程序,我就无法发生崩溃。
更多技术部分:
关闭修改
为了这个帖子的完整性(因为此时有几个线程),@ gregg-miskelly提供的解决方法(由@SwampyFox提交给SO)确实有效。该错误已提交给MS,应在将来的.NET Framework版本中修复。
进行答案 0 :(得分:14)
根据github上的OP帖子EF 6.1.3 Crashing IIS Express with FatalExecutionEngineError in ASP.Net Core MVC #10717,这是框架中的崩溃。
打开ETW GC内存跟踪会触发崩溃。
要解决此问题,您可以尝试在Visual Studio中关闭ETW GC内存跟踪。
答案 1 :(得分:1)
我遇到与net462和带有EF 6.1.3项目的ASP.NET 1.1相同的问题
<PropertyGroup>
<TargetFramework>net462</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Folder Include="wwwroot\" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore" Version="1.1.1" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.2" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.1" />
<PackageReference Include="EntityFramework" Version="6.1.3" />
</ItemGroup>
我在IIS Express中运行时收到以下异常(但不是全部):
托管调试助手'FatalExecutionEngineError':'运行时 遇到了致命的错误。错误的地址是 0x709a1a09,在线程0x5020上。错误代码是0xc0000005。这个错误 可能是CLR中的错误或不安全或不可验证的部分 用户代码。此错误的常见来源包括用户编组错误 对于COM-interop或PInvoke,它可能会破坏堆栈。'
如果我调用异步或同步,或者即使我从Main调用我的DbContext,也会发生这种情况:
public static void Main(string[] args)
{
using (var db = new MyDbContext())
{
var WorkOrders = db.WorkOrders.ToList();
}
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
如果我直接运行我的应用程序(在IIS Express之外),这种情况永远不会发生。
显然这仍然是一个问题。