当前位置: 首页 > news >正文

手工编辑 tasks.json 和 launch.json,让你的 VSCode 具备调试 .NET Core 程序的能力

如果 C# for Visual Studio Code 没有办法自动为你生成正确的 tasks.json 和 launch.json 文件,那么可以考虑阅读本文手工创建他们。


本文内容

    • 前期准备
    • 半自动创建 tasks.json 和 launch.json
    • 全手工创建 tasks.json 和 launch.json

前期准备

你需要安装 .NET Core Sdk、Visual Studio Code 和 C# for Visual Studio Code,然后打开一个 .NET Core 的项目。如果你没有准备,请先阅读:

  • 让你的 VSCode 具备调试 C# 语言 .NET Core 程序的能力

本文主要处理自动生成的配置文件无法满足要求,手工生成。

半自动创建 tasks.json 和 launch.json

这依然是个偷懒的好方案,我喜欢。

  1. 按下 F5;
  2. 在弹出的列表中,选择 .NET Core;

选择 .NET Core

自动生成的 tasks.json 和 launch.json

你不需要再做什么其他的工作了,这时再按下 F5 你已经可以开始调试了。

全手工创建 tasks.json 和 launch.json

tasks.json 定义一组任务。其中我们需要的是编译任务,通常编译一个项目使用的动词是 build。比如 dotnet build 命令就是这样的动词。

于是定义一个名字为 build 的任务,对应 label 标签。commandargs 对应我们在命令行中编译一个项目时使用的命令行和参数。typeprocess 表示此任务是启动一个进程。

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "command": "dotnet",
            "type": "process",
            "args": [
                "build",
                "${workspaceFolder}/Walterlv.InfinityStartupTest/Walterlv.InfinityStartupTest.csproj"
            ],
            "problemMatcher": "$msCompile"
        }
    ]
}

在 launch.json 中通常配置两个启动配置,一个是启动调试,一个是附加调试。

type 是在安装了 C# for Visual Studio Code (powered by OmniSharp) 插件之后才会有的调试类型。preLaunchTask 表示在此启动开始之前需要执行的任务,这里指定的 build 跟前面的 build 任务就关联起来了。program 是调试的程序路径,console 指定调试控制台使用内部控制台。

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "调试 Walterlv 的自动化测试程序",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            "program": "${workspaceFolder}/Walterlv.InfinityStartupTest/bin/Debug/netcoreapp3.0/Walterlv.InfinityStartupTest.dll",
            "args": [],
            "cwd": "${workspaceFolder}/Walterlv.InfinityStartupTest",
            "console": "internalConsole",
            "stopAtEntry": false,
            "internalConsoleOptions": "openOnSessionStart"
        },
        {
            "name": "附加进程",
            "type": "coreclr",
            "request": "attach",
            "processId": "${command:pickProcess}"
        }
    ]
}

这样自己手写的方式更灵活但是也更难。


我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • C#/.NET 如何结束掉一个进程
  • C#/.NET 移动或重命名一个文件夹(如果存在,则合并而不是出现异常报错)
  • 如何创建应用程序清单文件 App.Manifest,如何创建不带清单的应用程序
  • 应用程序清单 Manifest 中各种 UAC 权限级别的含义和效果
  • 启用 Windows 审核模式(Audit Mode),以 Administrator 账户来设置电脑的开箱体验
  • Windows 中的 UAC 用户账户控制
  • Windows 下使用 runas 命令以指定的权限启动一个进程(非管理员、管理员)
  • Windows 的 UAC 设置中的通知等级实际上只有两个档而已
  • Windows 系统上使用任务管理器查看进程的各项属性(命令行、DPI、管理员权限等)
  • C#/.NET 如何获取一个异常(Exception)的关键特征,用来判断两个异常是否表示同一个异常
  • C#/.NET 如何在第一次机会异常 FirstChanceException 中获取比较完整的异常堆栈
  • C#/.NET 使用 git 命令行来操作 git 仓库
  • C#/.NET 中启动进程时所使用的 UseShellExecute 设置为 true 和 false 分别代表什么意思?
  • WPF 的命令的自动刷新时机——当你 CanExecute 会返回 true 但命令依旧不可用时可能是这些原因
  • 将 C++/WinRT 中的线程切换体验带到 C# 中来(WPF 版本)
  • 【css3】浏览器内核及其兼容性
  • avalon2.2的VM生成过程
  • JavaScript类型识别
  • Java编程基础24——递归练习
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • SQL 难点解决:记录的引用
  • SQLServer之创建数据库快照
  • 猴子数据域名防封接口降低小说被封的风险
  • 聚类分析——Kmeans
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 模型微调
  • 排序(1):冒泡排序
  • 深入 Nginx 之配置篇
  • 微服务核心架构梳理
  • 我看到的前端
  • 学习笔记:对象,原型和继承(1)
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 阿里云移动端播放器高级功能介绍
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​第20课 在Android Native开发中加入新的C++类
  • #define 用法
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • $forceUpdate()函数
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (10)STL算法之搜索(二) 二分查找
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (HAL库版)freeRTOS移植STMF103
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (八)Flask之app.route装饰器函数的参数
  • (三)c52学习之旅-点亮LED灯
  • (一)WLAN定义和基本架构转
  • (转)EXC_BREAKPOINT僵尸错误
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • *上位机的定义
  • .net Signalr 使用笔记
  • .net6使用Sejil可视化日志
  • .net与java建立WebService再互相调用
  • .Net语言中的StringBuilder:入门到精通
  • .NET中GET与SET的用法