Blazor(.NET6) Server/Client应用部署Google App Engine失败报错
Blazor .NET 6 部署至Google App Engine 报错解决方案
问题描述
我有一个Blazor(.NET 6) Server/Client应用,本地通过Visual Studio的HTTPS或Docker容器启动都正常,但执行gcloud app deploy部署到Google App Engine时,出现以下错误:
Step 8/18 : RUN dotnet restore "./SevenOfNine/Server/SevenOfNine.Server.csproj" ---> Running in b72b6927c101 MSBUILD : error MSB1009: Project file does not exist. Switch: ./SevenOfNine/Server/SevenOfNine.Server.csproj The command '/bin/sh -c dotnet restore "./SevenOfNine/Server/SevenOfNine.Server.csproj"' returned a non-zero code: 1
相关配置文件
Dockerfile
#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging. FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base WORKDIR /app EXPOSE 80 EXPOSE 443 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build ARG BUILD_CONFIGURATION=Release WORKDIR /src COPY ["SevenOfNine/Server/SevenOfNine.Server.csproj", "SevenOfNine/Server/"] COPY ["SevenOfNine/Server/holodeckhub-da6f4d98c75e.json", "SevenOfNine/Server/"] COPY ["SevenOfNine.Models/SevenOfNine.Models.csproj", "SevenOfNine.Models/"] COPY ["SevenOfNine/Client/SevenOfNine.Client.csproj", "SevenOfNine/Client/"] COPY ["SevenOfNine/Shared/SevenOfNine.Shared.csproj", "SevenOfNine/Shared/"] RUN dotnet restore "./SevenOfNine/Server/SevenOfNine.Server.csproj" COPY . . WORKDIR "/src/SevenOfNine/Server" RUN dotnet build "./SevenOfNine.Server.csproj" -c $BUILD_CONFIGURATION -o /app/build FROM build AS publish ARG BUILD_CONFIGURATION=Release RUN dotnet publish "./SevenOfNine.Server.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "SevenOfNine.Server.dll"]
app.yaml
runtime: custom env: flex
文件夹结构
\BorgCollective\ BorgCollective.sln .dockerignore SevenOfNine\ Server\ SevenOfNine.Server.csproj Dockerfile Client\ SevenOfNine.Client.csproj
.dockerignore文件
**/.classpath **/.dockerignore **/.env **/.git **/.gitignore **/.project **/.settings **/.toolstarget **/.vs **/.vscode **/*.*proj.user **/*.dbmdl **/*.jfm **/azds.yaml **/bin **/charts **/docker-compose* **/Dockerfile* **/node_modules **/npm-debug.log **/obj **/secrets.dev.yaml **/values.dev.yaml LICENSE README.md !**/.gitignore !.git/HEAD !.git/config !.git/packed-refs !.git/refs/heads/**
解决方案
核心原因
你从Server子文件夹执行部署命令,但Dockerfile中的路径是基于解决方案根目录(BorgCollective)定义的,导致构建上下文不对,COPY指令找不到项目文件。
解决步骤
切换到解决方案根目录执行部署
进入\BorgCollective\文件夹,运行gcloud app deploy。这是最直接的方案,能保证Dockerfile的路径上下文与本地调试时一致。调整Dockerfile路径(可选)
若坚持从Server目录部署,需修改Dockerfile中所有路径,适配当前上下文:# 修改COPY指令路径 COPY ["../SevenOfNine/Server/SevenOfNine.Server.csproj", "../SevenOfNine/Server/"] COPY ["../SevenOfNine.Models/SevenOfNine.Models.csproj", "../SevenOfNine.Models/"] COPY ["../SevenOfNine/Client/SevenOfNine.Client.csproj", "../SevenOfNine/Client/"] COPY ["../SevenOfNine/Shared/SevenOfNine.Shared.csproj", "../SevenOfNine/Shared/"] # 修改restore路径 RUN dotnet restore "../SevenOfNine/Server/SevenOfNine.Server.csproj" # 修改COPY根目录 COPY .. . WORKDIR "/src/SevenOfNine/Server"此方式容易因路径层级出错,优先推荐第一种方案。
验证.dockerignore配置
临时注释掉**/Dockerfile*和**/.dockerignore规则,避免部署时误排除必要文件(当前错误并非由此导致,但可排除潜在问题)。
内容的提问来源于stack exchange,提问作者Dan Csharpster
相关产品推荐
相关产品推荐

