【问题标题】:Include filename and line number in stacktrace from ASP.NET Core在 ASP.NET Core 的堆栈跟踪中包含文件名和行号
【发布时间】:2018-08-20 04:16:21
【问题描述】:

在 .NET 完整框架中,通过在输出中包含调试信息并将调试信息设置为 pdb-onlyfull,可以在从发布版本生成的堆栈跟踪中包含文件名和行号。在 ASP.NET Core 和 Azure Function Apps 中工作时,这些选项似乎不再可以通过 UI 访问,或者如果将生成的 XML 添加到项目文件中,这些选项似乎不再起作用。当我创建一个新项目并在发布模式下运行它时,文件名和行号不是堆栈跟踪的一部分。

如何在 ASP.NET Core 的发布版本中包含文件名和行号?

更新:重新创建的步骤!

添加一个新的异常日志中间件:

app.Use(async (context, next) =>
{
    try
    {
        await next.Invoke();
    }
    catch (Exception e)
    {
        Console.WriteLine(e.ToString());
    }
});

在默认生成的ValuesController中抛出异常:

[HttpGet]
public IEnumerable<string> Get()
{
    throw new Exception();
}

构建项目(调试/发布无关紧要)。使用 exe 文件运行应用程序并点击 /api/values。 Stacktrace 不包含文件名和行号:

System.Exception: Exception of type 'System.Exception' was thrown.
   at WebApplication50.Controllers.ValuesController.Get()
   at lambda_method(Closure , Object , Object[] )
   at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters)
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeActionMethodAsync>d__12.MoveNext()

(我不希望这篇文章变成一个利弊的帖子。我知道有些人认为包含这些信息是一种死罪,而有些人则不这样认为 :)

【问题讨论】:

  • 我创建了 .Net Core 控制台应用程序并添加了引发异常的方法。然后我使用dotnet publish -c Release -r win-x64 命令构建了应用程序。当应用程序启动时,源文件名和行号的异常被转储到控制台(这里是screenshot)。你有什么线索让你的项目与众不同吗?
  • @CodeFuller 我明白你的意思。刚刚创建了一个新的 .NET Core 控制台应用程序,Debug 和 Release 都使用文件名和行号构建了输出堆栈跟踪。问题似乎出现在 Web 应用程序、功能应用程序和类似的项目类型中。我会重新提出问题。谢谢!
  • 仍然无法重现您的案例。默认 ASP.NET Core Web 应用程序在堆栈跟踪中转储文件名和行号 - snag.gy/FJ8opm.jpg
  • @CodeFuller Questions 更新了重现步骤。
  • 我实际上无法通过问题中的更新步骤重现您的问题。能否请您将文件名未转储到 github 的测试项目?

标签: visual-studio asp.net-core .net-core azure-functions csproj


【解决方案1】:

要获得带有行号的堆栈跟踪:

  • 转到项目属性
  • 构建
  • 高级
  • 调试信息 = 完整(确保在发布配置中这样做)

文档:https://docs.microsoft.com/en-us/visualstudio/ide/reference/advanced-build-settings-dialog-box-csharp?view=vs-2017#output

(由于一些奇怪的原因,我仍然有一些没有行号的堆栈跟踪,但这是另一个问题)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多