在 Mac 上的 VS Code 中在 .NET6 MVC 项目上使用 Serilog 时出现问题
Posted
技术标签:
【中文标题】在 Mac 上的 VS Code 中在 .NET6 MVC 项目上使用 Serilog 时出现问题【英文标题】:Problem Using Serilog on .NET6 MVC Project in VS Code on Mac 【发布时间】:2021-11-12 17:22:46 【问题描述】:我正在将旧版 .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
在终端dotnet new mvc
中创建一个vanilla MVC项目
在 Visual Studio Code 中打开并按照任何设置说明进行操作(例如:安装 C# 扩展、设置 .Net Core Launch (web) launch.json 和 tasks.json)
通过 nuget Install-Package Serilog -Version 2.10.0
添加 Serilog 并添加 Serilog.ASPNetCore Install-Package Serilog.AspNetCore -Version 4.1.0
在 Program.cs 中,在 var builder = WebApplication.CreateBuilder(args);
行下方添加 builder.Host.UseSerilog();
运行和调试
它将编译,一切看起来都正常,但不会启动浏览器窗口,它会在显示所有各种 DLL 后停止。如果您注释掉 //builder.Host.UseSerilog();
一切正常。
我不认为它是 Serilog,因为如果我在 Windows 机器上的 Visual Studio 2022 Preview 中打开完全相同的项目(没有更改),它工作正常。
有什么建议或想法可能对我有帮助吗?
【问题讨论】:
更新 - 使用任何操作系统版本的 VS Code(Windows 或 Mac)都会出现同样的问题 【参考方案1】:VS Code 监视控制台输出以查找在 serverReadyAction
下的 launch.json
中定义的特定正则表达式,因此,如果您根本不写入控制台(似乎是您的情况)或者如果您使用与正则表达式中的内容不匹配的输出模板写入控制台,则永远不会启动浏览器。
"serverReadyAction":
"action": "openExternally",
"pattern": "\\bNow listening on:\\s+(https?://\\S+)" <<<<<<<<
写入控制台应该足以让 VS Code 使用现在默认模板附带的默认 RegEx 启动浏览器(我知道....不过不要射击信使,向 VS Code 抱怨伙计们!?):
builder.Host.UseSerilog((ctx, lc) => lc
.WriteTo.Console());
如果这不起作用并且正则表达式不匹配,您可以更改正则表达式,或更改输出模板以匹配正则表达式(老生常谈,不是我的建议,但有效):
builder.Host.UseSerilog((ctx, lc) => lc
.WriteTo.Console(outputTemplate: "Level:w4: SourceContext[0] NewLine Message:ljExceptionNewLine"));
【讨论】:
这对我有用!谢谢!以上是关于在 Mac 上的 VS Code 中在 .NET6 MVC 项目上使用 Serilog 时出现问题的主要内容,如果未能解决你的问题,请参考以下文章
在 VS Code 中在 Android 手机上运行 Flutter 应用
让 PHP Xdebug 在 Mac VS Code 上工作
使用VS Code配合Remote Development插件连接远程服务器(Mac/Linux+Windows) | Using VS Code with Remote Development Co
text 在Mac OSX中向Finder服务添加命令以在VS Code中打开文件夹