gpt4 book ai didi

docker - 错误消息 "Program does not contain a static ' Main' 适合入口点的方法”

转载 作者:行者123 更新时间:2023-12-02 18:06:08 25 4
gpt4 key购买 nike

我有一个 ASP.NET CORE 应用程序,里面有几个项目和以下 Dockerfile:

FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY src/Mbv.Vans.Core/Mbv.Vans.Core.csproj Mbv.Vans.Core/
COPY src/Mbv.Vans.Common/Mbv.Vans.Common.csproj Mbv.Vans.Common/
COPY src/Mbv.Vans.Api/Mbv.Vans.Api.csproj Mbv.Vans.Api/

RUN dotnet restore Mbv.Vans.Api/Mbv.Vans.Api.csproj
COPY . .
FROM build AS publish
RUN dotnet publish Mbv.Vans.Api/Mbv.Vans.Api.csproj --no-restore -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .

ENTRYPOINT ["dotnet", "Mbv.Vans.Api.dll"]

在线RUN dotnet publish Mbv.Vans.Api/Mbv.Vans.Api.csproj --no-restore -c Release -o /app当它尝试构建项目时,失败并出现错误:

"Program does not contain a static 'Main' method suitable for an entry point"

这是我的 .csproj 文件:

<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<NoWarn>1591</NoWarn>
<GenerateProgramFile>false</GenerateProgramFile>
</PropertyGroup>

关于这个问题我搜索了很多问题,分为以下几种解决方法:

  1. COPY . .没有解决这个问题
  2. 我只有一个static void main
  3. <GenereteProgramFile> false没有帮助。

有人可以帮我解决这个可怕的问题吗?

最佳答案

所以,我遇到了同样的问题,把我逼疯了。这里的解决方案是跳过构建并直接进行发布。

查看此特定示例对我有所帮助:https://github.com/dotnet/dotnet-docker/blob/master/samples/aspnetapp/Dockerfile.alpine-x64

如您所见,没有构建发生。有一个恢复,然后是一个发布。为什么不建?我不知道。我正在调查,但我很高兴它至少对我有用。让我知道进展如何。

编辑附加信息:

这是原始的非工作 Dockerfile:

FROM microsoft/dotnet:2.2-aspnetcore-runtime-nanoserver-1809 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM microsoft/dotnet:2.2-sdk-nanoserver-1809 AS build
WORKDIR /src
COPY ["mercurynorth_netcore/mercurynorth_netcore.csproj", "mercurynorth_netcore/"]
RUN dotnet restore "mercurynorth_netcore/mercurynorth_netcore.csproj"
COPY . .
WORKDIR "/src/mercurynorth_netcore"
RUN dotnet build "mercurynorth_netcore.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "mercurynorth_netcore.csproj" -c Release -o /app

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

...这是新工作的 Dockerfile:

FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine AS build
WORKDIR /app


# Lets do a restore of the NuGet packages, and then restore the app in a container.
COPY mercurynorth_netcore.csproj ./
RUN dotnet restore "mercurynorth_netcore.csproj"
COPY . .
RUN dotnet publish "mercurynorth_netcore.csproj" -c Release -o /app

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS final
WORKDIR /app
EXPOSE 80
EXPOSE 443
COPY --from=build /app .
ENTRYPOINT ["dotnet", "mercurynorth_netcore.dll"]

如您所见,我通常所做的是删除以下行:

RUN dotnet build "mercurynorth_netcore.csproj" -c Release -o /app

...以及做一些清理工作。

一般要点是,在我的开发机器上运行构建命令可以正常工作,但作为构建容器的一部分,它将失败。

关于docker - 错误消息 "Program does not contain a static ' Main' 适合入口点的方法”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54803270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com