更新:每当一头牛放屁时,这种情况就会继续发生,所以我不得不继续解决这个问题。我终于找到了这个报告,它说它是启用 docker-compose v2 时的一个已知内部问题。
修复方法是使用 docker-compose disable-v2 禁用 V2。
您可以使用docker-compose --version 验证它是否已禁用。
他们声称真正的修复程序正在 2021 年 10 月中旬进行,并将很快发布。他们还声称 Visual Studio 2022 预览版中已经包含修复程序。
https://developercommunity2.visualstudio.com/t/Debugging-docker-compose-VS-cant-attac/1551330?entry=problem&ref=native&refTime=1636020527854&refUserId=09da1758-2dd4-4352-bba5-ea1f5e163268
我还写了这个 powershell 脚本来清除 VS 缓存的所有垃圾,所以没有任何东西卡住。
$ErrorActionPreference = 'Stop'
# delete various folders from the root folder
if ((Test-Path -Path .vs)) {
Remove-Item .vs -recurse -force -Verbose
}
if ((Test-Path -Path obj)) {
Remove-Item obj -recurse -Verbose
}
if ((Test-Path -Path bin)) {
Remove-Item bin -recurse -Verbose
}
# delete various folders recursively
$currentfolder = Get-Location
Get-ChildItem -Path $currentfolder -Directory -Include bin, obj -Recurse | Remove-Item -Force -recurse -Verbose
Get-ChildItem -Path $currentfolder -File -Include docker-compose.dcproj.user -Recurse | Remove-Item -Force -recurse -Verbose
Get-ChildItem -Path $currentfolder -Directory -Recurse -Attributes H | Where-Object { $_.Name.Contains('.vs') } | Remove-Item -Force -recurse -Verbose
# delete all volumes except those with the keep label
#docker volume prune --filter "label!=keep" -f
原答案
想出了如何让它再次工作,但我仍然不知道它为什么会发生,而且它似乎时不时地随机fubar。
我最终创建了另一个临时启动应用程序并向其添加容器编排,以便我可以查看它是否可以运行
将文件与我的真实应用程序进行比较。新的临时应用程序确实在 docker-compose 中成功运行,所以我开始查看各种文件的差异
两个应用程序之间。它们都是微小的差异,即使我更新了我的真实应用程序以匹配临时应用程序的文件,它仍然无法运行。
我注意到在 Visual Studio 2019 中,您实际上可以看到有关正在运行的 docker 容器的详细信息,并且还注意到它向我显示了临时
应用程序和我关心的真实应用程序。因此,我查看了两者的所有容器详细信息,并缩小了一个名为 com.microsoft.visualstudio.debuggee.arguments 的标签
这显然在我的真实应用的容器中丢失了一些东西。
临时应用程序将该标签设置为:
--additionalProbingPath /root/.nuget/packages "/app/bin/Debug/net5.0/Test.dll"
但我真正的应用程序却有这个,它缺少启动/调试我的应用程序所需的程序集的路径。
--additionalProbingPath /root/.nuget/packages ""
Visual Studio 会创建一个文件 obj\Docker\docker-compose.vs.debug.g.yml 并在您调试时将其传递给 docker-compose,但该标签缺少让我的应用程序启动和运行的魔力。
我不知道为什么 Visual Studio 会 fubaring 这个文件,但它继续随机发生。
这些是最终让它工作的步骤。
- 关闭 Visual Studio 的所有实例
- 手动删除以下文件夹
.vs
bin
obj
- 手动删除项目中的所有
.user文件。
- 打开 Docker Desktop 并删除项目创建的 docker-compose 堆栈。
- 删除项目的 docker 镜像
- 加载您的项目并尝试再次运行它。
Visual Studio 这次应该使用正确的位重新生成上述文件,并且应该附加到容器中。