【发布时间】:2019-01-10 10:38:10
【问题描述】:
我有一个面向 .Net Core 2.2 的 ASP.Net Core 2.2 应用程序。我使用新的in-process hosting model 在 Azure 应用服务上托管它。
然后我通过应用服务诊断工具创建内存转储。使用 Visual Studio 打开它,我看到两个 CLR 版本:4.7.3190.0; 4.6.27110.4。我可以看出 4.7.3190.0 用于 .Net Framework,而 4.6.27110.4 用于 .Net Core。
如果我在 WinDBG 中打开转储,它会继续加载 4.7.3190.0 的 mscordacwks DLL。我无法让它加载 4.6.27110.4 的 mscordaccore DLL。因此,一个简单的 SOS 命令(例如 !Threads)会导致错误 Failed to request ThreadStore。
如何使用 WinDBG 和 SOS 调试我的托管代码(.Net Core 部分)?
您可以获取示例内存转储here。
更新
感谢Thomas Weller 的大力帮助!这种情况的解决方案是运行.cordll -u -I coreclr -l -lp "C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.2.0\"。我必须在一个命令中卸载 (-u) CLR DAC 并加载 (-l) Core CLR DAC。
成功的命令和日志是here。
【问题讨论】:
-
您应该为您的应用服务禁用 ASP.NET 4.x,以消除 .NET Framework 噪音。 .NET Core 调试应遵循bret.codes/net-core-and-windbg 等初始步骤
-
@LexLi:你能教我如何为我的应用服务禁用 ASP.NET 4.x 吗?我只能在门户中选择 3.5 和 4.7,但无法禁用它。
标签: iis asp.net-core windbg azure-web-app-service