You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将.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)无法被识别。推荐以下两种解决方式:

  1. 从解决方案根目录部署:切换到包含.sln文件的目录,执行gcloud app deploy ./Project.Public/app-api.yaml --version=1.1,这样App Engine会上传整个解决方案目录,构建时能自动找到所有引用项目。
  2. 调整部署包含范围:若必须从项目目录部署,需在项目目录下创建.gcloudignore文件,确保不排除引用项目的目录,同时执行部署时添加--include-gitignore=false参数。但第一种方案更稳定,优先推荐。

额外检查项

  • 确保gcloud CLI为最新版本,旧版本可能对.NET 8支持不足:执行gcloud components update完成升级。
  • 确认app.yaml中的runtime: aspnetcore兼容.NET 8,目前Google已支持该版本,ubuntu22操作系统配置无问题。

内容的提问来源于stack exchange,提问作者Alex M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 13:22:08