Visual Studio 2019从最近列表打开方案构建Dockerfile时找不到csproj文件
错误本质
你遇到的报错核心是Docker构建上下文路径错误,VS从最近列表加载项目时使用了缓存的错误工作目录,导致COPY指令无法找到存在的xxxx/aaaa.csproj文件:
[0mfailed to solve: rpc error: code = Unknown desc = failed to compute cache key: "/xxxx/aaaa.csproj" not found: not found A non-critical error occurred while getting containers ready. Your project will continue to function normally. The error was: [0mfailed to solve: rpc error: code = Unknown desc = failed to compute cache key: "/xxxx/aaaa.csproj" not found: not found
触发原因
VS的「最近打开」列表会缓存项目的启动工作目录,当你移动过解决方案文件夹、清理过部分缓存、或是同路径下存在过同名旧项目时,缓存的工作目录就会和实际.sln所在的根目录不一致。Docker构建时会以VS的工作目录作为上下文根目录,路径不匹配就会找不到对应文件。而从资源管理器双击.sln打开时,VS会自动将.sln所在目录设为工作目录,上下文正确所以运行正常。
排查解决步骤
- 验证当前解决方案根路径:打开项目后右键解决方案资源管理器顶部的「解决方案」节点,选择「在文件资源管理器中打开文件夹」,确认打开的目录下同时存在.sln文件和存放
aaaa.csproj的xxxx文件夹。如果路径不匹配,直接关闭VS,从正确路径的.sln文件重新打开即可恢复。 - 修正Docker生成上下文配置:右键启用了Docker支持的项目,选择「属性」→「调试」,找到「Docker文件生成上下文」配置项,将值修改为
.(代表当前.sln所在根目录),保存后重新构建测试。 - 清理VS缓存的项目配置:关闭所有VS窗口,按下Win+R输入
%LocalAppData%\Microsoft\VisualStudio\16.0_*\ComponentModelCache,删除该目录下所有缓存文件,重启VS后从最近列表打开项目测试。 - 固定项目Docker上下文配置:如果上述方法都无效,可以直接在项目的.csproj文件的
PropertyGroup节点中添加如下配置,强制指定Docker构建的上下文路径:
<DockerfileContext>..\</DockerfileContext>
内容的提问来源于stack exchange,提问作者Juan David Cadavid Quintero

