无法调试 Blazor wasm

lon*_*nix 6 c# debugging asp.net-core blazor blazor-webassembly

我用的是vscode。我无法调试“独立”(或“托管”)blazor wasm。

类似的问题有很多,但它们都是针对 RC、.NET 6 明显修复的错误或 SDK 6.0.102 中明显修复的工具错误。

我阅读了所有文档我怀疑这个问题是由于已知的热重载兼容性错误而变得更加复杂。

我了解一切的最新情况。我在 Linux (ubuntu 20) 上使用 chromium。

当我尝试调试时,我在弹出窗口中收到此错误:

Unable to launch browser: "Failed to launch browser!
ERROR:sandbox_linux.cc(377)] InitializeSandbox() called with multiple threads in process gpu-process.
WARNING: Kernel has no file descriptor comparison support: Operation not permitted
ERROR:process_singleton_posix.cc(341)] Failed to create /home/username/.config/Code/User/workspaceStorage/4208cd9cd69c4fe2a941aed538319caa/ms-vscode.js-debug/.profile/SingletonLock: Permission denied (13)
ERROR:chrome_browser_main.cc(1432)] Failed to create a ProcessSingleton for your profile directory. This means that running multiple instances would start multiple browser processes rather than opening a new window in the existing process. Aborting now to avoid profile corruption.
TROUBLESHOOTING: https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md
Run Code Online (Sandbox Code Playgroud)

该错误没有帮助,就像我chmod 777对该目录所做的那样,但它仍然抱怨权限。我还收到其他错误,也很神秘。

我想知道这是否可能,因为在搜寻了数十个 SO 问题和回购问题后,我找不到任何声称拥有工作设置并可以显示工作配置的人。

那么:有没有人真正设法让这个工作:blazor(独立,但托管也很好),vscode,热重载,linux?如果有,请发布您的工作配置?

lon*_*nix 5

我设法让它与微软的Edge浏览器一起工作。

虽然我在 Linux 上使用 VSCode,但它对于 Windows / Mac 上的 Visual Studio 应该是类似的,因为我相信基于 Roslyn 的底层工具是相同的。

更新依赖项

确保您使用的是最新的 SDK 版本:6.0.202。检查使用dotnet --version.

安装边缘

  • 从这里获取二进制文件(linux、mac、windows)
  • 如果您使用的是 Linux,则可以 1) 使用 deb / rpm 二进制文件,或 2) 包管理器选项(对于 debian / ubuntu):
    curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
    sudo install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/
    sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge-stable.list'
    sudo rm microsoft.gpg
    sudo apt update && sudo apt install microsoft-edge-stable
    
    Run Code Online (Sandbox Code Playgroud)

更新“独立”项目的配置

MyProject/Properties/launchSettings.json

{
  "profiles": {
    "Standalone": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}",
      "applicationUrl": "https://localhost:6000;http://localhost:6001",           // <------
      "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

MyProject/.vscode/launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch and Debug Standalone Blazor WebAssembly App",
      "type": "blazorwasm",
      "request": "launch",
      "browser": "edge",                 // <------
      "url": "http://localhost:6001"     // <------
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

在服务器项目中启用 CORS

配置服务时:

curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/
sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge-stable.list'
sudo rm microsoft.gpg
sudo apt update && sudo apt install microsoft-edge-stable
Run Code Online (Sandbox Code Playgroud)

配置中间件管道时:

{
  "profiles": {
    "Standalone": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}",
      "applicationUrl": "https://localhost:6000;http://localhost:6001",           // <------
      "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在 blazor 项目中设置服务器地址

更新 blazor 模板生成的代码(仅作为示例,使用您的服务器地址):

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch and Debug Standalone Blazor WebAssembly App",
      "type": "blazorwasm",
      "request": "launch",
      "browser": "edge",                 // <------
      "url": "http://localhost:6001"     // <------
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

测试

在 blazor 项目中设置一些断点,然后按F5

笔记

我在客户端使用了端口60006001,因为服务器可能已经在使用50005001

我发现 Edge 是一个不错的浏览器。这也是一个不错的选择,因为调试工具会在每次会话后关闭浏览器,因此如果我使用我喜欢的浏览器,它每次都会关闭。即使这些错误得到修复,我想我也会保留 Edge 作为 blazor 的“调试浏览器”。

调试体验并不完美:有时在开始调试时,它会显示“浏览器似乎已经从旧的调试会话运行。请在尝试调试之前将其关闭,否则 VS Code 可能无法连接到它。” - 只需单击“无论如何调试”。

我无法同时进行调试和热重载。我在存储库或文档网站上的某个地方读到,尚不支持此场景(但将在未来的补丁版本或 .NET 7 中)。

  • 感谢 @lonix 提供的操作方法。为什么调试 Blazor 应用程序如此困难?只是一个反问句 (3认同)
  • @Coderbit 抱歉,我认为 v7 没有任何变化。 (2认同)