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

时间:2018-03-12 07:39:29

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

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

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

更新:重新创建的步骤!

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

full

在默认生成的app.Use(async (context, next) => { try { await next.Invoke(); } catch (Exception e) { Console.WriteLine(e.ToString()); } });

中抛出异常
ValuesController

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

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

(我不希望这变成一个利弊帖。我知道有些人认为包含这些信息是死亡罪,有些人不这样做。)

1 个答案:

答案 0 :(得分:2)

要具有行号的堆栈跟踪:

  • 转到项目属性
  • 构建
  • 高级
  • 调试信息=完整(请确保在发布配置中执行此操作)

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

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