asp.net-mvc - 在 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 似乎工作得很好。
要复制我的问题:
- 确保在 Mac 上安装了 .NET 6
- 在 Mac 上打开 Visual Studio Code(我在 x64 和 Arm 上试过)
- 打开终端并创建一个文件夹
mkdir TestMVC
并进入该文件夹cd TestMVC
- 在终端中创建一个 vanilla MVC 项目
dotnet new mvc
- 在 Visual Studio Code 中打开并按照任何设置说明进行操作(例如:安装 C# 扩展、设置 .Net Core Launch (web) launch.json 和 tasks.json)
- 通过 nuget 添加 Serilog
Install-Package Serilog -Version 2.10.0
并添加 Serilog.ASPNetCoreInstall-Package Serilog.AspNetCore -Version 4.1.0
- 在 Program.cs 中,在 v行
builder.Host.UseSerilog();
下方添加ar builder = WebApplication.CreateBuilder(args);
- 运行和调试
它将编译,一切看起来都正常,但不会启动浏览器窗口,它会在显示所有各种 DLL 后停止。如果您注释掉//builder.Host.UseSerilog();
一切正常。
我不认为它是 Serilog,因为如果我在 Windows 机器上的 Visual Studio 2022 Preview 中打开完全相同的项目(没有更改),它工作正常。
任何可能对我有帮助的建议或想法?
解决方案
launch.json
VS 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}"));
推荐阅读
- amazon-s3 - Logstash 从 s3 读取所有 ELB 日志,而不仅仅是当前日志
- mysql - 错误 1452:无法添加或更新子行:外键约束失败,任何人都可以提供帮助
- mongodb - '在副本集配置中找到名为'majority'的写入关注模式'错误
- flutter - 如何在 Flutter 中使 FlatButtons 的宽度相同
- c# - C# 大文件下载可从 azure blob 存储恢复
- python - 使用 Keras 理解 WeightedKappaLoss
- python - Python 3井字游戏的问题
- javascript - 如何将 JavaScript 数组作为参数传递给 URL 并在 PHP 中捕获?
- c# - SVG 渐变文件不正确地渲染到图形
- oracle - 从 Oracle 数据库中的 sql developer 生成 sql 跟踪文件