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

Dockerfile执行dotnet restore报错:.csproj文件缺失

问题:Docker构建时dotnet restore提示项目文件不存在

文件结构

-- Dockerfile
-- MeetingApp.sln
-- src
   -- MeetingApp.Api
      -- MeetingApp.Api.csproj
   -- <other related projects>

原Dockerfile内容

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app
ENV ASPNETCORE_URLS=https://+:7001;http://+:7000
EXPOSE 7000
EXPOSE 7001

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["./src/MeetingApp.Api/MeetingApp.Api.csproj", "MeetingApp.Api"]
COPY ["./src/MeetingApp.Application/MeetingApp.Application.csproj", "MeetingApp.Application"]
COPY ["./src/MeetingApp.Contracts/MeetingApp.Contracts.csproj", "MeetingApp.Contracts"]
COPY ["./src/MeetingApp.Domain/MeetingApp.Domain.csproj", "MeetingApp.Domain.Api"]
COPY ["./src/MeetingApp.EntityFramework/MeetingApp.EntityFramework.csproj", "MeetingApp.EntityFramework"]
COPY ["./src/MeetingApp.Infrastructure/MeetingApp.Infrastructure.csproj", "src/MeetingApp.Infrastructure"]

RUN dotnet restore "MeetingApp.Api/MeetingApp.Api.csproj"
COPY . .
WORKDIR "src/MeetingApp.Api"
RUN dotnet build "MeetingApp.Api.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "MeetingApp.Api.csproj" -c Release -o /app/publish /p:UseAppHost=false --no-restore

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MeetingApp.Api.dll"]

错误信息

[build  9/12] RUN dotnet restore "MeetingApp.Api/MeetingApp.Api.csproj":
0.626 MSBUILD : error MSB1009: Project file does not exist.
0.626 Switch: MeetingApp.Api/MeetingApp.Api.csproj
------
Dockerfile:16
--------------------
  14 |     COPY ["./src/MeetingApp.Infrastructure/MeetingApp.Infrastructure.csproj", "src/MeetingApp.Infrastructure"]
  15 |
  16 | >>> RUN dotnet restore "MeetingApp.Api/MeetingApp.Api.csproj"
  17 |     COPY . .
  18 |     WORKDIR "src/MeetingApp.Api"
--------------------
ERROR: failed to solve: process "/bin/sh -c dotnet restore \"MeetingApp.Api/MeetingApp.Api.csproj\"" did not complete successfully: exit code: 1

解决方案

问题分析

  1. 项目复制路径错误:
    • MeetingApp.Domain的项目文件被错误复制到MeetingApp.Domain.Api目录,而非与项目名称匹配的MeetingApp.Domain
    • MeetingApp.Infrastructure的项目文件被复制到src/MeetingApp.Infrastructure,导致其位于/src/src/MeetingApp.Infrastructure路径下,与其他项目层级不一致,破坏依赖引用路径
  2. 还原策略问题:单独还原Api项目时,依赖的其他项目路径错误,导致无法找到依赖文件

修复步骤

调整Dockerfile,统一项目复制路径,并基于解决方案文件进行还原:

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app
ENV ASPNETCORE_URLS=https://+:7001;http://+:7000
EXPOSE 7000
EXPOSE 7001

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src

# 先复制解决方案文件
COPY MeetingApp.sln .

# 统一项目文件复制路径,保持与本地结构一致
COPY ["./src/MeetingApp.Api/MeetingApp.Api.csproj", "src/MeetingApp.Api/"]
COPY ["./src/MeetingApp.Application/MeetingApp.Application.csproj", "src/MeetingApp.Application/"]
COPY ["./src/MeetingApp.Contracts/MeetingApp.Contracts.csproj", "src/MeetingApp.Contracts/"]
COPY ["./src/MeetingApp.Domain/MeetingApp.Domain.csproj", "src/MeetingApp.Domain/"]
COPY ["./src/MeetingApp.EntityFramework/MeetingApp.EntityFramework.csproj", "src/MeetingApp.EntityFramework/"]
COPY ["./src/MeetingApp.Infrastructure/MeetingApp.Infrastructure.csproj", "src/MeetingApp.Infrastructure/"]

# 基于解决方案文件还原所有项目
RUN dotnet restore MeetingApp.sln

# 复制完整代码
COPY . .

WORKDIR "/src/src/MeetingApp.Api"
RUN dotnet build "MeetingApp.Api.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "MeetingApp.Api.csproj" -c Release -o /app/publish /p:UseAppHost=false --no-restore

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MeetingApp.Api.dll"]

关键修改说明

  • 先复制解决方案文件,确保restore能识别所有项目依赖
  • 所有项目文件复制到与本地结构一致的src/[ProjectName]/路径下,保持层级统一
  • 使用dotnet restore MeetingApp.sln替代单独还原Api项目,确保所有依赖能被正确找到

内容的提问来源于stack exchange,提问作者JackFord

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 15:16:03