我有一个.NET Core应用程序在Docker容器中运行,作为组合配置的一部分。该应用程序使用dotnet watch run运行。我已经在launch.json中进行了以下启动配置:
@properties = Property.where(address: [@request.address])
当我运行调试任务时,将显示进程选择器。但是,我似乎无法选择出现的任何过程。可用过程的列表包括:
"configurations": [
{
"name": ".NET Core Docker Attach",
"type": "coreclr",
"request": "attach",
"processId": "${command:pickRemoteProcess}",
"pipeTransport": {
"pipeProgram": "docker",
"pipeArgs": [ "exec", "-i", "taskservice" ],
"debuggerPath": "/vsdbg/vsdbg",
"pipeCwd": "${workspaceRoot}",
"quoteArgs": false
}
}
]
我想第一个是正确的选择。如果选择它,则会收到错误:dotnet 1 dotnet watrch run
dotnet <defunct> 216
dotnet <defunct> 71
...
有人对此有任何经验并知道我可能做错了吗?
答案 0 :(得分:0)
看来dotnet watch
产生了几个其他过程来监视文件,重建程序集并最终重新运行所生成的程序集。您必须附加到实际运行该已生成程序集的子进程。它看起来应该如下所示:
dotnet exec yourapp.dll
其中yourapp.dll
是由正在监视的项目构建的程序集。作为参考,以下是导致我不得不附加到程序集的过程(首先是我的docker entrypoint shell脚本和foo.csproj输出MyApp.dll):
bin/sh -c /bin/bash ./entrypoint.sh
dotnet watch -p foo/foo.csproj run
/usr/share/dotnet/dotnet /usr/share/dotnet/sdk/2.2.401/DotnetTools/dotnet-watch/2.2.0/tools/netcoreapp2.2/any/dotnet-watch.dll -p foo/foo.csproj run
/usr/share/dotnet/dotnet run
dot`net exec /app/foo/MyApp.dll