Docker 错误消息";程序不包含静态';主要';“适用于入口点的方法”;

Docker 错误消息";程序不包含静态';主要';“适用于入口点的方法”;,docker,asp.net-core,Docker,Asp.net Core,我有一个ASP.NET核心应用程序,其中包含一些项目和以下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.Com

我有一个ASP.NET核心应用程序,其中包含一些项目和以下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"]
联机
运行dotnet publish Mbv.Vans.Api/Mbv.Vans.Api.csproj--no restore-c Release-o/app
当它尝试构建项目时,失败并出现错误:

“程序不包含适合入口点的静态“Main”方法”

这是我的.csproj文件:

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

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

netcoreapp2.2
真的
1591
假的
我搜索了很多关于这个问题的问题,并将其分为以下几个决议:

  • 复制未解决此问题
  • 我只有一个
    static void main
  • false
    没有帮助

  • 有人能帮我解决这个棘手的问题吗?

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

    通过查看此特定样本,我得到了帮助:

    正如您在其中看到的,没有生成。先进行恢复,然后进行发布。为什么不建造?我不知道。我正在调查,但我很高兴它至少对我有效。让我知道进展如何

    编辑以获取更多信息:

    以下是原始的非工作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"]
    
    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"]
    
    …这里是新工作的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"]
    
    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
    
    …以及做一些清理


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

    您的项目结构是什么?分享给我们,你在哪里运行docker命令?对于此错误,通常是因为文件夹中没有
    Program.cs
    。最好了解有关此错误的更多详细信息。您是否有公开的源文件可以重新处理问题?您的主要方法位于哪个项目?您是否尝试在Docker的上下文之外重现该问题(例如,将您在Docker文件中复制的文件夹集复制到计算机上的一个单独文件夹,并尝试从该新位置构建)?我也遇到类似问题。请看一看,这可能会起作用。请从此处的链接添加相关部分。没有生成,因为“运行dotnet publish”执行生成过程。您可以指定要启用或禁用的参数。CaseyK-您是否可以共享Dockerfile不工作时的外观以及为使其工作所做的更改?正如AlexZholob所说,运行build命令在理论上应该是不必要的,因为publish隐含着这样做。为此,我遇到了完全相同的问题,它似乎与设置
    -o
    值有关,如果您不指定它,那么
    build
    工作,但是如果您使用它,那么它不会出于某种原因而publish工作。