如何在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的理想效果,总结了以下替代方案:
- 打开VSCode终端(支持多终端,适合多项目工作区);
- 切换到项目目录(示例中为
App1文件夹); - 执行命令:
dotnet watch; - 如果需要调试(注意:必须在修改源码前操作,否则无效):
- 左侧菜单选择「运行和调试」;
- 下拉菜单选择「App1 Attach」;
- 点击运行按钮
注意:源码修改后热重载会自动重启
App1.dll,需要重新附加进程 - 需要停止程序时,在终端按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
相关产品推荐
相关产品推荐

