Сообщение об ошибке «Программа не содержит статический метод Main, подходящий для точки входа» - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть приложение 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 Когда он пытается построить проект, происходит сбой с ошибкой:

"Программа не содержит статический метод 'Main', подходящий для точки входа"

Вот мой файл .csproj:

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

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

Iобыскал множество вопросов по этой проблеме и разделил ее на следующие решения:

  1. COPY . . не решает эту проблему
  2. У меня есть только один static void main
  3. <GenereteProgramFile> false не помогает.

Может ли кто-нибудь помочь мне решить эту ужасную проблему?

1 Ответ

0 голосов
/ 14 апреля 2019

Итак, я наткнулся на эту же проблему и довел меня до безумия.Решение здесь состоит в том, чтобы пропустить сборку и перейти прямо к публикации.

Мне помог этот образец: 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

... а также выполнял некоторую очистку.

Общий вывод заключается в том, что выполнение команды build на моих машинах и разработчиках будет работать нормально, но как часть сборки контейнера это не удастся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...