在ASP.NET Core的stacktrace中包含文件名和行号

Tho*_*dal 9 csproj visual-studio .net-core asp.net-core azure-functions

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

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

更新:重新创建的步骤!

添加新的异常记录中间件:

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

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

[HttpGet]
public IEnumerable<string> Get()
{
    throw new Exception();
}
Run Code Online (Sandbox Code Playgroud)

构建项目(调试/发布无关紧要).使用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()
Run Code Online (Sandbox Code Playgroud)

(我不希望这变成一个优点/缺点.我知道有些人认为包含这些信息是死亡罪,有些人不这样做:)

Tom*_*map 2

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

  • 转到项目属性
  • 建造
  • 先进的
  • 调试信息 = 完整(请务必在发布配置中执行此操作)

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

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