2017-03-13 64 views
15

好的,這是一個剛剛開發的非常奇怪的問題,對我而言,我不知道從哪裏開始。非託管代碼中的ASP Net Core 1.1和EF 6異常?

出於某種原因,我在EF 6的某處發生了一個致命錯誤,但是這隻發生在我轉換爲.NET Core 1.1之後。此應用程序沒有問題,運行在ASP.Net MVC 4

Reason for my sleepless nights

的搜索引擎:

託管調試助手 'FatalExecutionEngineError':「運行時遇到一個致命錯誤。錯誤的地址是0x77c81a09,線程0x2520。錯誤代碼是0xc0000005。此錯誤可能是CLR中的錯誤,也可能是用戶代碼中不安全或不可驗證的部分。這個bug的常見來源包括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和Build之後工作的。

我真的不知所措。我讀過它可能與環境有關。目前,我沒有其他環境可以測試,只是我的開發機器。如果我在另一臺機器上運行,我將嘗試稍後更新。

如果我通過代碼(第一個例子)步驟,一切都會按計劃:


我剛剛發佈之前做了另一個實驗。

停止。刪除斷點。開始。崩潰。

這讓我感動了一堵牆。


更新

彷彿這無法得到太多的陌生人,這個錯誤不會發生我每次啓動時間。

我會說它的大約60/40有利於崩潰。當它運行時(並且第一個查詢經過),我對該進程的整個生命週期沒有任何問題。

另一個更新

看起來這是孤立的IIS下運行快車。如果我以獨立的方式運行應用程序,則無法產生崩潰。


一些更多的技術位:

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

關閉編輯

對於這個線程完整性的考慮(因爲有在這一點上幾個線程),由@格雷格 - miskelly(並提交給SO由@SwampyFox)確實工作所提供的解決方法。該錯誤已提交給MS,並且應該在未來的.NET Framework發行版中修復。

的討論發生在coreclr GitHub page

+0

看起來好像你在.NET Core中發現了一個bug。爲什麼不嘗試找到導致此錯誤的「最小代碼」並向.NET Core團隊提出問題? –

+0

我一直在遇到同樣的問題。正如你所說的,完整的清理/重建似乎可以解決它(通常)。但是,有時需要手動刪除受影響項目的「bin」和「obj」文件夾。 –

+0

我一定會嘗試找到導致此問題的基本案例。 @BenWalters如果你有關於你的情況的任何信息,請分享。我今天被帶出辦公室,但聽到它不僅僅是我,我感到放心。 –

回答

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. 打開工具 - >選項
  2. 類型在搜索欄中
  3. 取消選中「診斷工具」「啓用診斷工具在調試」下的調試常規部分。
+1

世界上你是如何找到這個解決方案的?十分感謝。 (更新:doh,我想你分享了源代碼) –

+0

當時,我遇到了這個問題,並且緊跟着GIT回購。 – SwampyFox

1

我遇到net462和ASP.NET 1.1中同樣的問題與EF 6.1.3項目

<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快遞運行:

託管調試助手「FatalExecutionEngineError」:「運行時 遇到致命錯誤。該錯誤的地址是線程0x5020上的 0x709a1a09。錯誤代碼是0xc0000005。此錯誤 可能是CLR中的錯誤或用戶代碼的不安全或不可驗證部分中的錯誤。這個錯誤的常見來源包括COM-interop或PInvoke的用戶編組錯誤 ,這可能會破壞堆棧。

它發生,如果我叫異步或同步或者即使我打電話給我的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快遞外)這從未發生過。

顯然這仍然是一個問題。