将.NET 8 Web应用部署至Google Cloud App Engine Flex时遇问题
升级.NET 8后Google App Engine部署失败问题排查
问题背景
此前使用gcloud app deploy部署.NET Core 3.1项目正常,升级至.NET 8后部署流程失效,原部署步骤如下:
- 执行
dotnet publish "./SolutionName/Project.Public/Project.Public.csproj" -o "publish-api/" -c Release生成发布文件夹 - 执行
cp app-api.yaml ./publish-api/将配置文件复制到发布文件夹 - 执行
gcloud app deploy ./publish-api/app-api.yaml --version=1.1时触发错误
错误场景1:从发布文件夹部署失败
错误日志:
Step #2 - "build": ERROR: No buildpack groups passed detection. Step #2 - "build": ERROR: Please check that you are running against the correct path. Step #2 - "build": ERROR: failed to detect: no buildpacks participating
疑问:是否遗漏关键步骤?无法直接从.NET发布文件夹部署?
错误场景2:从项目目录直接部署,引用项目丢失
直接在解决方案内的项目目录执行部署,流程可推进,但出现引用项目找不到的错误:
Step #2 - "build": Use 'dotnet --help' to see available commands or visit: https://aka.ms/dotnet-cli Step #2 - "build": -------------------------------------------------------------------------------------- Step #2 - "build": Determining projects to restore... Step #2 - "build": Skipping project "/API.Common/API.Common.csproj" because it was not found. Step #2 - "build": Skipping project "/API.Common/API.Common.csproj" because it was not found. Step #2 - "build": Restored /workspace/API.csproj (in 10.28 sec).
补充说明:使用相同app.yaml部署单项目HelloWorld应用可正常完成,但多项目解决方案下无法识别引用项目。
部署配置文件(app-api.yaml)
runtime: aspnetcore env: flex service: default runtime_config: operating_system: ubuntu22 automatic_scaling: min_num_instances: 1 cpu_utilization: target_utilization: 0.75 liveness_check: path: "/health" check_interval_sec: 30 timeout_sec: 4 failure_threshold: 4 success_threshold: 2 resources: cpu: 1 memory_gb: 1 disk_size_gb: 10 env_variables: GCLOUD_PROJECT_ID: proj-id
解决建议
针对发布文件夹部署失败的问题
Google App Engine Flex环境的ASP.NET Core构建包,默认要求从源代码目录触发构建,而非已发布的输出文件夹。.NET 8的构建包检测逻辑比.NET Core 3.1更严格,已发布文件夹缺少构建必需的项目文件(如.csproj/.sln),导致检测不通过。
若要直接部署发布后的文件,需改用自定义运行时,但会增加配置复杂度。更简单的方案是调整为从源代码目录部署,同时解决引用项目缺失的问题。
针对多项目解决方案引用缺失的问题
直接从项目目录部署时,App Engine默认仅上传当前目录文件,导致解决方案内的其他项目(如API.Common)无法被识别。推荐以下两种解决方式:
- 从解决方案根目录部署:切换到包含
.sln文件的目录,执行gcloud app deploy ./Project.Public/app-api.yaml --version=1.1,这样App Engine会上传整个解决方案目录,构建时能自动找到所有引用项目。 - 调整部署包含范围:若必须从项目目录部署,需在项目目录下创建
.gcloudignore文件,确保不排除引用项目的目录,同时执行部署时添加--include-gitignore=false参数。但第一种方案更稳定,优先推荐。
额外检查项
- 确保
gcloudCLI为最新版本,旧版本可能对.NET 8支持不足:执行gcloud components update完成升级。 - 确认
app.yaml中的runtime: aspnetcore兼容.NET 8,目前Google已支持该版本,ubuntu22操作系统配置无问题。
内容的提问来源于stack exchange,提问作者Alex M
相关产品推荐
相关产品推荐

