I'm trying to containerize an ASP.NET hosted Blazor WebAssembly project, but I can't build my image. It fails on dotnet build:
error CS5001: Program does not contain a static 'Main' method suitable for an entry point [/src/Web/VL.Challenge.Blazor.Client/VL.Challenge.Blazor.Client.csproj]
Folder structure
build
--API
----Dockerfile
src
--Web
----VL.Challenge.API
----VL.Challenge.Blazor.Client
...
docker-compose.yaml
Dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
WORKDIR /app
EXPOSE 80
ENV ASPNETCORE_ENVIRONMENT Production
ENV ASPNETCORE_URLS=http://+:80
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY /src/Web/VL.Challenge.API/VL.Challenge.API.csproj Web/VL.Challenge.API/
COPY /src/Web/VL.Challenge.Blazor.Client/VL.Challenge.Blazor.Client.csproj Web/VL.Challenge.Blazor.Client/
COPY /src/VL.Challenge.Common/VL.Challenge.Common.csproj VL.Challenge.Common/
COPY /src/VL.Challenge.Domain/VL.Challenge.Domain.csproj VL.Challenge.Domain/
COPY /src/VL.Challenge.Storage/VL.Challenge.Storage.csproj VL.Challenge.Storage/
WORKDIR /src/Web/VL.Challenge.API
RUN dotnet restore VL.Challenge.API.csproj
WORKDIR /src/
COPY src/Web/VL.Challenge.API Web/
COPY src/Web/VL.Challenge.Blazor.Client Web/
COPY src/VL.Challenge.Common .
COPY src/VL.Challenge.Domain .
COPY src/VL.Challenge.Storage .
WORKDIR /src/Web
RUN dotnet build VL.Challenge.API/VL.Challenge.API.csproj -c Release -o /app/build
FROM build AS publish
RUN dotnet publish VL.Challenge.API.csproj -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT dotnet VL.Challenge.API.dll
This setup works if I remove the dependency of VL.Challenge.API to VL.Challenge.Blazor.Client so I know my docker-compose.yaml sets the correct context for the image. Tried with both root-level and Program class options. The project builds locally without issues.
Am I missing something obvious here?