首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误信息“程序不包含适合入口点的静态‘主’方法”

错误信息“程序不包含适合入口点的静态‘主’方法”
EN

Stack Overflow用户
提问于 2019-02-21 09:15:01
回答 1查看 1.7K关注 0票数 3

我有一个ASP.NET核心应用程序,里面有几个项目,下面是Dockerfile:

代码语言:javascript
复制
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上,当它试图构建项目时,它会出现错误:

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

这是我的.csproj文件:

代码语言:javascript
复制
<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帮不上忙。

有人能帮我解决这个大问题吗?

EN

回答 1

Stack Overflow用户

发布于 2019-04-14 19:18:37

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

通过查看这个特定的示例:https://github.com/dotnet/dotnet-docker/blob/master/samples/aspnetapp/Dockerfile.alpine-x64,我得到了帮助

正如您可以在那里看到的,没有生成发生。有一个恢复,然后是一个发布。为什么不建呢?我不知道。我在调查,但我很高兴它至少对我有用。告诉我事情进展如何。

编辑以获得更多信息:

这里是原始的不工作的Dockerfile:

代码语言:javascript
复制
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"]

...and这里是新工作的Dockerfile:

代码语言:javascript
复制
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"]

正如您所看到的,我通常所做的是删除这一行:

代码语言:javascript
复制
RUN dotnet build "mercurynorth_netcore.csproj" -c Release -o /app

...as做些清理工作。

一般情况下,在我的dev机器上运行build命令会很好,但是作为构建容器的一部分,它将失败。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54803270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档