当前,我直接在Linux工作站上运行ASP.NET Core。但是我想直接使用Docker进行开发,包括远程调试。根据不同的文章,似乎需要vsdbg。所以我尝试了以下方法:
FROM mcr.microsoft.com/dotnet/core/sdk:2.2
RUN apt update && \
apt install unzip && \
curl -sSL https://aka.ms/getvsdbgsh | /bin/sh /dev/stdin -v latest -l /vsdbg
WORKDIR /app
COPY . .
RUN dotnet publish
WORKDIR /app/bin/Debug/netcoreapp2.2/publish/
ENTRYPOINT dotnet MyApp.dll
docker容器已启动,我可以在浏览器中访问我的ASP.NET Core应用程序。 VS代码应随附以下launch.json
代码段:
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach",
"processId": "${command:pickProcess}",
"sourceFileMap": {
"/app": "${workspaceRoot}"
},
"pipeTransport": {
"pipeProgram": "docker",
"pipeArgs": ["exec", "-i", "my-docker-container-name"],
"debuggerPath": "/vsdbg/vsdbg",
"pipeCwd": "${workspaceRoot}",
"quoteArgs": false
}
}
运行此调试附加条目后,它将显示带有进程ID的选择列表。第一个包含dotnet MyApp.dll
,因此这必须是我的docker进程。但是,选择后,VS Code将显示一个弹出窗口,显示当前没有任何进程使用选定的ID运行。
进程ID是正确的。我尝试运行kill <pid>
,并且退出了Docker容器中的dotnet进程。
似乎与quoteArgs
有关。当我将其设置为false时,会发生另一个错误:
OCI运行时exec失败:exec失败:container_linux.go:345:启动容器进程导致“ exec:\” / vsdbg / vsdbg --interpreter = vscode \”:统计信息/ vsdbg / vsdbg --interpreter = vscode:否这样的文件或目录”:未知
没有引号,他尝试执行"/usr/bin/docker" exec -i <my-docker-container-name> /vsdbg/vsdbg --interpreter=vscode
。我手动执行此操作,它启动vsdbg并保持终端打开。因此quoteArgs: false
对于Docker似乎是正确的。尽管我完全不明白为什么这会导致VS Code中奇怪的 no进程没有运行pid 错误。