【发布时间】:2020-12-14 11:41:31
【问题描述】:
我知道这个问题重复了很多次,但我尝试了许多已发布的解决方案,但没有任何效果。 所以我在 Azure DevOps 发布管道上运行 docker,代理作业返回了这个错误:
Program does not contain a static 'Main' method suitable for an entry point [/src/Main/Api/Api.csproj]
这是我的 Dockerfile:
FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
ENV ASPNETCORE_ENVIRONMENT #{environment-profile}#
FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
WORKDIR /src
COPY ["Main/Api/Api.csproj", "Main/Api/"]
COPY ["Main/Domain/Domain.csproj", "Main/Domain/"]
COPY ["Side/Infra/Infra.csproj", "Side/Infra/"]
RUN dotnet restore "Main/Api/Api.csproj"
WORKDIR "/src/Main/Api"
COPY . .
RUN dotnet build "Api.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Api.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Api.dll", "--environment=#{environment-profile}#"]
错误来自这一行:RUN dotnet build "Api.csproj" -c Release -o /app/build
这是我的项目结构:
打开.sln文件后:
- 主要(文件夹)
- API(文件夹)
- Api.csroj
- 域(文件夹)
- Domain.csproj
- API(文件夹)
- 侧(文件夹)
- 基础设施(文件夹)
- Infra.csproj
- 基础设施(文件夹)
我关注了 SO 中的一些帖子,将 COPY . . 放在 WORKDIR "/src/Main/Api" 之后,但效果不佳。
我也不想将我的 Dockerfile 移动到根目录,因为我在这个解决方案中有两个 Dockerfile,所以我想将它们维护在各自的文件夹中。 (不过我还是试过了,把 Dockerfile 放到根目录下也不行……)
此外,这个 Dockerfile 在我的本地成功构建。仅在 Azure DevOps 发布管道中失败。我已将发布管道中 Dockerfile 的路径设置为$(System.DefaultWorkingDirectory)/_Main_CI/drop/Main/Api/Dockerfile,并将构建上下文设置为$(System.DefaultWorkingDirectory)/_Main_CI/drop。
如果有人知道出了什么问题,不胜感激!谢谢!
【问题讨论】:
-
嗨@Corene,我注意到Bassam Gamal 与您分享了许多有用的信息。如果建议对您解决问题有帮助,请将他的回答标记为该主题的解决方案。在寻找答案时,它可能会帮助遇到类似问题的其他人。谢谢。
标签: docker .net-core azure-devops