You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VSCode中通过F5/Ctrl+F5启动dotnet watch实现C#项目热重载

在VSCode中通过F5/Ctrl+F5启动dotnet watch实现热重载调试

我有一个.NET C#项目,希望不用每次手动编译启动就能测试源码变更——终端执行dotnet watch可以实现这个需求,但我想直接通过VSCode的F5(启动调试)或Ctrl+F5(不调试运行)触发dotnet watch。

已尝试的方案

首次尝试

最初我以为在launch.json中添加"args": ["watch"]就能实现,配置如下:

{
    "name": "App1 launch",
    "type": "coreclr",
    "request": "launch",
    "preLaunchTask": "App1 build",
    "program": "${workspaceFolder}/App1/bin/Debug/net7.0/App1.dll",
    "args": ["watch"],
    "cwd": "${workspaceFolder}/App1",
    "stopAtEntry": false
}

结果:完全没效果。因为"type": "coreclr"会在启动时执行dotnet exec,这个执行逻辑会直接忽略watch参数。

第二次尝试

之后参考教程配置了launch.json和tasks.json:
launch.json配置:

{
    "name": "App1 launch",
    "type": "coreclr",
    "request": "launch",
    "preLaunchTask": "App1 watch",
    "program": "${workspaceFolder}/App1/bin/Debug/net7.0/App1.dll",
    "args": [],
    "cwd": "${workspaceFolder}/App1",
    "stopAtEntry": false
}

tasks.json添加的任务:

{
    "label": "App1 watch",
    "command": "dotnet",
    "type": "process",
    "args": [
        "watch",
        "run",
        "${workspaceFolder}/App1/App1.csproj",
        "/property:GenerateFullPaths=true",
        "/consoleloggerparameters:NoSummary"
    ],
    "problemMatcher": "$msCompile",
    "options": {
        "cwd": "${workspaceFolder}/App1/"
    }
}

结果:

  • 单独执行App1 watch任务可以正常启动dotnet watch并启用热重载,符合预期;
  • 但作为预启动任务时,终端会卡在等待Ctrl+C的状态,后续的启动流程完全不执行;
  • 手动终止预启动任务后,VSCode又会通过dotnet exec重新启动程序,完全不符合需求。

可行的替代方案

尝试多种方法后没能实现直接通过F5启动dotnet watch的理想效果,总结了以下替代方案:

  1. 打开VSCode终端(支持多终端,适合多项目工作区);
  2. 切换到项目目录(示例中为App1文件夹);
  3. 执行命令:dotnet watch;
  4. 如果需要调试(注意:必须在修改源码前操作,否则无效):
    • 左侧菜单选择「运行和调试」;
    • 下拉菜单选择「App1 Attach」;
    • 点击运行按钮

    注意:源码修改后热重载会自动重启App1.dll,需要重新附加进程

  5. 需要停止程序时,在终端按Ctrl+C。

其中步骤4需要在launch.json中添加以下附加调试配置:

{
    "name": "App1 attach",
    "type": "coreclr",
    "request": "attach",
    "processName":"App1.dll"
}

这个方案的缺点是热重载重启程序后需要重新附加进程,但日常开发中仅通过终端的错误输出就能完成大部分迭代测试,不需要每次都附加调试。

说明

以上示例假设VSCode工作区包含名为App1的项目,位于App1文件夹下,launch.json和tasks.json需放在.vscode目录中。

环境配置

  • Visual Studio Code: 1.83.1
  • .NET SDK版本: 7.0.403
  • 已安装的.NET运行时:
    • Microsoft.AspNetCore.App 7.0.13
    • Microsoft.NETCore.App 7.0.13
    • Microsoft.WindowsDesktop.App 7.0.13
  • 操作系统:Windows 10.0.22621

内容的提问来源于stack exchange,提问作者Tapani Talvitie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 04:53:12