将 Visual Studio 2019 卷映射到 nuget 包缓存

Gue*_*lla 7 visual-studio docker asp.net-core

我不使用 Visual Studio 2019 内部的内置 docker build,因为它太有问题了。相反,我构建了自己的容器,然后将 VS2019 附加到它以进行调试。

如果我对单个依赖项(或前一层)进行更改,那么它将重新下载所有依赖项以重建所需的层。

这是带宽/时间密集型的,并且包已经缓存在本地机器中。

我已阅读:https : //docs.microsoft.com/en-us/visualstudio/containers/container-build?view=vs-2019

它有一个有趣的表格,解释了内置功能如何映射文件夹:

在此处输入图片说明

我怎么看那个映射是什么样的?我认为如果我将该卷映射添加到我自己的撰写文件中,那么它将大大提高速度,因为它不必在每次构建时重新下载。

Sos*_*der 3

为了查看您的 docker 容器到底映射到什么,您可以通过以下方式列出 docker 容器

docker ps
Run Code Online (Sandbox Code Playgroud)

然后获取您的容器 ID,并通过以下方式检查它

docker inspect <id>
Run Code Online (Sandbox Code Playgroud)

我现在有一个正在运行的容器,它使用内置的 VS 工具集,所以让我们看看它是如何描述挂载的:

...
        {
            "Type": "bind",
            "Source": "/host_mnt/c/Users/<name>/.nuget/packages",
            "Destination": "/root/.nuget/packages",
            "Mode": "ro",
            "RW": false,
            "Propagation": "rprivate"
        },
...
Run Code Online (Sandbox Code Playgroud)

好的,这就是您可能正在寻找的坐骑。

为了看看 VS 到底做了什么,你可以转到项目的“obj”文件夹,然后转到“Doc​​ker”。

在这里你会发现VS将用于调用的实际有趣的docker-compose up文件,例如文件docker-compose.vs.debug.g.yml。在这里您还可以找到发布配置,它不包含 NuGet 安装,因为它实际上是使用dotnet publish.

因此,在docker-compose.vs.debug.g.yml文件中,您最终可以找到安装所需的路径,对于我的应用程序来说,它看起来像这样:

    volumes:
  - ...
  - C:\Users\<name>\.nuget\packages\:/root/.nuget/packages:ro
Run Code Online (Sandbox Code Playgroud)

这正是我们在 docker 检查中发现的。

我希望这有帮助。

另外,请看一下这篇文章,其中详细介绍了 VS 使用的整个 docker 设置的工作原理:

https://www.scrum-tips.com/2017/12/27/understanding-docker-with-visual-studio-2017-part-2/