首页 > 解决方案 > 在 Mac 上的 VS Code 中在 .NET6 MVC 项目上使用 Serilog 时出现问题

问题描述

我正在将旧版 .NET 2.2 Core MVC 应用程序迁移到 .NET 6。我的挑战之一是 Program.cs 不再调用 Startup.cs,因此我需要将所有内容迁移到 Program.cs。大多数情况下,有 1 个问题就可以了。我无法让 Serilog 在 Mac 上使用 VS Code 在调试模式下正常工作。问题是在 Windows 上使用 Visual Studio Community 2022 似乎工作得很好。

要复制我的问题:

  1. 确保在 Mac 上安装了 .NET 6
  2. 在 Mac 上打开 Visual Studio Code(我在 x64 和 Arm 上试过)
  3. 打开终端并创建一个文件夹mkdir TestMVC并进入该文件夹cd TestMVC
  4. 在终端中创建一个 vanilla MVC 项目dotnet new mvc
  5. 在 Visual Studio Code 中打开并按照任何设置说明进行操作(例如:安装 C# 扩展、设置 .Net Core Launch (web) launch.json 和 tasks.json)
  6. 通过 nuget 添加 SerilogInstall-Package Serilog -Version 2.10.0并添加 Serilog.ASPNetCoreInstall-Package Serilog.AspNetCore -Version 4.1.0
  7. 在 Program.cs 中,在 v行builder.Host.UseSerilog();下方添加ar builder = WebApplication.CreateBuilder(args);
  8. 运行和调试

它将编译,一切看起来都正常,但不会启动浏览器窗口,它会在显示所有各种 DLL 后停止。如果您注释掉//builder.Host.UseSerilog();一切正常。

我不认为它是 Serilog,因为如果我在 Windows 机器上的 Visual Studio 2022 Preview 中打开完全相同的项目(没有更改),它工作正常。

任何可能对我有帮助的建议或想法?

标签: asp.net-mvcvisual-studiovisual-studio-codeserilog.net-6.0

解决方案


launch.jsonVS Code 监视控制台输出以查找在您的under中定义的特定正则表达式serverReadyAction,因此,如果您根本不写入控制台(似乎是您的情况),或者您使用输出模板写入控制台这与正则表达式中的内容不匹配,则永远不会启动浏览器。

"serverReadyAction": {
  "action": "openExternally",
  "pattern": "\\bNow listening on:\\s+(https?://\\S+)"  <<<<<<<<
}

写入控制台应该足以让 VS Code 使用现在默认模板附带的默认 RegEx 启动浏览器(我知道......不过,不要射击信使,向 VS Code 的人抱怨!) :

builder.Host.UseSerilog((ctx, lc) => lc
    .WriteTo.Console());

如果这不起作用并且正则表达式不匹配,您可以更改正则表达式,或更改输出模板以匹配正则表达式(hacky,不是我的建议,但有效):

builder.Host.UseSerilog((ctx, lc) => lc
    .WriteTo.Console(outputTemplate: "{Level:w4}: {SourceContext}[0] {NewLine}      {Message:lj}{Exception}{NewLine}"));

推荐阅读