![图片[1]-如何在 VS Code 中调试 Docker 化的 .NET Core 应用-软件库](https://pic.knrjk.com/view.php/079d4753a970fc94c45f441fa6bfb271.png)
我最近切换到VS Code来开发dockerized .NET核心应用程序。但后来我意识到,关于在 VS Code 中调试 dockerized .NET 核心应用程序的最新文章并不多。

所以,我在这里,写这篇文章。我希望它能帮助像我这样的其他人在VS Code中调试他们的dockerized .NET core应用程序。
在本文中,我们将讨论以下内容:
- Docker 的 VS 代码扩展
- VS 代码启动配置
- 如何在本地 Docker 上调试 .NET 核心应用
VS 代码扩展 Docker

虽然调试容器化的.NET核心应用程序实际上不需要扩展(对于你这个铁杆极简主义者来说),但我仍然建议你安装微软的Docker扩展。它将使从VS Code中创建,管理和调试容器化应用程序变得容易。
老实说,自从我开始使用扩展以来,我不再使用 Docker 桌面了。
VS 代码启动配置
现在,为了调试 dockerized .NET Core 应用程序,我们需要创建一个 VS 代码启动配置。
在本节中,我将讨论两种启动配置:一种用于 docker 运行,另一种用于 docker 编写。
稍后,我们还将研究最终的启动配置并了解它们,以便我们知道我们在做什么。
码头工人运行启动配置
如果您安装了Microsoft的Docker扩展,这应该很容易。
首先,在VS代码中按“ Ctrl + P”并输入> Docker:

接下来,选择“Docker:初始化 Docker 调试”。
然后选择“.NET: ASP.NET Core”作为应用程序平台。选择“Linux”作为您的操作系统。
瞧!您现在应该有一个“Docker .NET Core Launch”启动配置。
请注意,Docker 扩展需要覆盖现有的 dockerfile。如果您不允许,它将不会创建启动配置。我建议您备份 dockerfile,让扩展覆盖它,然后恢复原始文件。
Docker 撰写启动配置
现在我们都知道,现实生活中的应用程序从来都不是那么简单!您可能有一个数据库容器、一个应用程序容器和其他一些容器,它们都通过 docker-compose 配置连接在一起。
如果是这种情况,下面介绍了如何创建启动配置。
首先,在 VS Code 中打开工作区。如果您已有启动配置,则可以跳过下一部分。
接下来,按“Ctrl + Shift + D”切换到“运行和调试选项卡”。
单击“创建 launch.json 文件”并选择“.NET 5+ 和 .NET Core”(这将创建一个基本的启动配置,以便在没有 Docker 的情况下运行您的应用程序)。

现在,当您的 launch.json 文件打开时,单击编辑器右下角的添加配置按钮。
从打开的下拉列表中选择“Docker: .NET Core Attach (预览版)”。

它应该添加了一个名为“Docker:.NET Core Attach (预览版)”的新配置。
瞧!现在,你已准备好在 VS Code 中调试 dockerized .NET Core 应用程序。
如何了解启动配置
在开始调试应用程序之前,让我们更仔细地了解启动配置,以了解它们的工作原理。
工作区根目录中的 .vscode 文件夹中应有两个文件。
{
"version": "2.0.0",
"tasks": [
{
"type": "docker-build",
"label": "docker-build: debug",
"dependsOn": [
"build"
],
"dockerBuild": {
"tag": "webapi:dev",
"target": "base",
"dockerfile": "${workspaceFolder}/src/Dockerfile",
"context": "${workspaceFolder}",
"pull": true
},
"netCore": {
"appProject": "${workspaceFolder}/src/webapi.csproj"
}
},
{
"type": "docker-run",
"label": "docker-run: debug",
"dependsOn": [
"docker-build: debug"
],
"dockerRun": {},
"netCore": {
"appProject": "${workspaceFolder}/src/webapi.csproj",
"enableDebugging": true
}
}
]
}
任务.json
首先,让我们看一下 tasks.json 文件。此文件包含某些启动配置可能需要才能正确启动应用程序的任务列表。
我们要看的任务是“docker-run:debug”。这是使用“Docker .NET Core Launch”配置启动时调用的任务(我们将在后面看到)。
此任务具有我们需要了解的三个属性:
- netCore.appProject:此属性特定于 .NET Core 应用,仅指向应用的项目文件。
- netCore.enableDebugging:这是另一个特定于 .NET Core 应用的属性,它告诉 VS 代码启动具有调试功能的应用。
- dependsOn:这是一个泛型属性,用于定义任务是否依赖于其他任务来执行。
其次,我们需要了解“docker-build:debug”任务的作用。
除了 netCore 和 dependsOn 属性之外,它还具有一个 dockerBuild 对象,该对象控制由 VS Code 运行的命令以启动 docker 运行应用。docker build
dockerBuild 对象的属性与您传递给命令的参数非常相似。docker build
您可以在此处阅读所有 dockerBuild 对象属性,并在此处阅读一般任务。
{
"version": "0.2.0",
"configurations": [
{
"name": "Docker .NET Core Attach",
"type": "docker",
"request": "attach",
"platform": "netCore",
"sourceFileMap": {
"/src": "${workspaceFolder}/src"
}
},
{
"name": "Docker .NET Core Launch",
"type": "docker",
"request": "launch",
"preLaunchTask": "docker-run: debug",
"netCore": {
"appProject": "${workspaceFolder}/src/webapi.csproj"
}
}
]
}
启动.json
现在,让我们看一下所有启动配置所在的 launch.json 文件。
虽然这些属性中的大多数都是标准的,但我们关心的是“Docker .NET Core Attach”配置中的“sourceFileMap”。
为了调试在 VS Code 计算机(在本例中为 Docker)以外的计算机上生成的 .NET Core 应用程序,VS Code 需要了解如何将当前工作区映射到生成计算机层次结构。
例如,如果我的项目是从 Linux 中的“/src”文件夹构建的,此属性将告诉 VS Code 在所有文件路径中将“/src”替换为“${workspaceFolder}/src”。如果此映射不正确,VS Code 将命中断点,但会给出一个错误,指出文件(正在调试)不存在。
您可以在此处详细了解 launch.json 属性。
如何在本地 Docker 上调试 .NET Core 应用

码头工人运行
现在我们已经弄清楚了启动配置,这应该很容易!只需按照以下步骤操作。
首先,按“Ctrl + Shift + D”切换到“运行和调试选项卡”。
然后选择“Docker .NET Core 启动”并按绿色播放图标进行调试。
- 最新
- 最热
只看作者