C# 如何让System.Diagnostics在Ubuntu Linux上的Blazor应用程序中工作?

C# 如何让System.Diagnostics在Ubuntu Linux上的Blazor应用程序中工作?,c#,linux,ubuntu,.net-core,blazor,C#,Linux,Ubuntu,.net Core,Blazor,我试图在Ubuntu Linux上的Blazor应用程序中使用Debug.WriteLine。当我使用dotnet run运行程序或使用F5使用调试器时,程序运行正常,但调试语句不起作用。我使用的编辑器是VisualStudio代码。 我见过类似的问题,但没有一个在Ubuntu或其他Linux发行版上解决这个问题 下面是代码中DamageCalculator类的构造函数和方法,它们调用Debug.WriteLine方法: using System; using System.Di

我试图在Ubuntu Linux上的Blazor应用程序中使用Debug.WriteLine。当我使用
dotnet run
运行程序或使用
F5
使用调试器时,程序运行正常,但调试语句不起作用。我使用的编辑器是VisualStudio代码。 我见过类似的问题,但没有一个在Ubuntu或其他Linux发行版上解决这个问题

下面是代码中DamageCalculator类的构造函数和方法,它们调用Debug.WriteLine方法:

    using System;
    using System.Diagnostics;

    .
    .

    public DamageCalculator()
    {
      Debug.WriteLine("Created an instance of DamageCalculator");
    }
    public void CalculateDamage()
    {
      Roll = Roll3Dice();
      Debug.WriteLine("Rolled the dice with roll: " + Roll);
      Damage = (int)(Roll * Multiplier)
    }
csproj文件:

<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="5.0.4" />
    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="5.0.4" PrivateAssets="all" />
    <PackageReference Include="System.Net.Http.Json" Version="5.0.0" />
  </ItemGroup>
</Project>
vscode的launch.json:

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "blazorwasm",
      "name": "Launch and Debug Blazor WebAssembly Application",
      "request": "launch"
    }
  ]
}

有人知道它为什么不工作以及如何工作吗?

如果要使用
Debug.WriteLine
功能,我建议使用内置记录器

它跨平台工作,您可以通过环境变量配置:

  • 要记录的严重性级别(跟踪、调试、信息、警告、错误、严重)
  • 要登录到的介质(磁盘、控制台)
  • 特定的平台功能,如systemd(linux)、eventlog(windows)等的使用
  • 提供一站式服务
它还以Blazor-PWA的形式登录到浏览器控制台:

(firefox控制台图像,使用paint编辑)

在大多数.net核心项目中,它是默认启用的

使用API控制器 通常,它与application.json中的默认日志设置一起使用:

"Logging": {
    "LogLevel": {
      "Default": "Debug",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  }

您在哪里/如何寻找输出?这不是Console.WriteLine()。我希望在实际执行程序的终端中看到输出。不,在Windows中,您需要运行WinDbg或Visual Studio。也许VS代码有一个“输出窗口”用于捕获调试输出。但请尝试Console.WriteLine()。在WebAssembly中:查看浏览器JS控制台。console.WriteLine()确实在浏览器内部工作。Debug.WriteLine无法工作,可能是因为它正在尝试写入stderr,但无法在浏览器中写入。感谢您详细的回答,在这种情况下,我将使用此内置记录器。你有关于调试类为什么不能在Linux上工作的更多信息吗?嗨,没有,不是真的。就这一点而言,我真的很惊讶,事实并非如此。像
Console.WriteLine
之类的东西都是现成的。我不明白为什么
Debug
不应该工作。我也没有发现关于它的任何信息在linux上是不可用的-所以,它可能只是工作,也许你的情况是非常具体的..它与Debug.WriteLine有关,试图在浏览器中写入stderr.Hmm。。。这仍然很奇怪,因为我相信stderr在大多数操作系统上都很常见。
public class CommandController : ControllerBase
{
    private readonly ILogger<CommandController> _logger;
    public CommandController(ILogger<CommandController> logger)
    {
        _logger = logger;
    }

    [HttpGet]
    public IActionResult Test()
    {
        _logger.LogDebug("Hi there!");
    }
}
@inject ILogger<Index> logger
<!--  html stuff -->
@code {
    protected async override Task OnParametersSetAsync()
    {
        logger.LogDebug("hellow!");
    }
}
builder.Logging.SetMinimumLevel(LogLevel.Debug);
"Logging": {
    "LogLevel": {
      "Default": "Debug",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  }