You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core项目IDE内置Docker运行正常,手动build时报找不到.csproj文件

手动执行Docker构建报csproj not found的排查与解决

问题核心原因

  • Visual Studio 2019/VS Code 内置的Docker调试流程,会自动匹配Dockerfile的存放位置设置正确的构建上下文路径,因此默认配置下可以正常完成镜像构建、启动容器。
  • 手动执行构建命令时抛出Failed to compute cache key: ".csproj" not found错误,本质是构建上下文和Dockerfile内的文件相对路径不匹配:Docker执行COPY指令时,只能访问指定构建上下文范围内的文件,当上下文路径下不存在目标csproj文件时,构建流程会直接中断。
    VS自动生成的ASP.NET Core Dockerfile默认存放在项目根目录(即存放myTestApp.csproj文件的同一文件夹下),Dockerfile内的COPY路径是基于该项目目录书写的。手动执行构建时如果把上下文设置成了项目目录的上一级(即解决方案根目录),Docker会直接在解决方案根目录下查找myTestApp.csproj,而实际csproj文件存放在子层级的项目文件夹中,自然会出现文件找不到的报错。

可直接落地的解决方法

  • 方法一(零代码修改,最适配默认Dockerfile配置):
    将终端的工作目录切换到存放Dockerfile和myTestApp.csproj的同一项目文件夹下,把构建命令的上下文参数从原来的..改成当前目录.:
    docker build -f ./Dockerfile --force-rm -t mytestapp:dev .
    
  • 方法二(不切换终端目录,保留在解决方案根目录执行命令):
    修改Dockerfile中涉及项目文件拷贝的路径,补上项目子目录的层级,适配解决方案根目录的构建上下文:
    将原Dockerfile中的:
    COPY ["myTestApp.csproj", "./"]
    RUN dotnet restore "myTestApp.csproj"
    
    调整为:
    COPY ["myTestApp/myTestApp.csproj", "./"]
    RUN dotnet restore "myTestApp.csproj"
    
    后续的COPY . .、项目构建、发布指令无需额外修改,即可正常匹配解决方案根目录的上下文范围。

新手避坑提示

  • Dockerfile中所有COPY、ADD指令书写的文件路径,都是相对于构建上下文根目录的相对路径,并非相对于Dockerfile文件本身的存放路径。只有被纳入构建上下文扫描范围的文件,才能被拷贝到镜像内。

内容的提问来源于stack exchange,提问作者Shahid Riaz Bhatti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.26 17:54:04