【发布时间】:2018-08-20 04:16:21
【问题描述】:
在 .NET 完整框架中,通过在输出中包含调试信息并将调试信息设置为 pdb-only 或 full,可以在从发布版本生成的堆栈跟踪中包含文件名和行号。在 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