Azure App Service配置WEBSITE_RUN_FROM_PACKAGE后.NET API无法运行
.NET API部署到Azure Linux App Service显示默认页面问题排查与修复
核心问题拆解
你的问题根源在于ZIP包目录结构不符合Azure要求,结合Linux App Service的运行机制,具体有这几个关键点:
1. GitHub Action打包时的目录层级错误
在publish作业里,你下载artifact后直接在当前目录执行zip -r,会把自动生成的app-${{ github.run_number }}外层文件夹也打包进去。Azure解压后,所有发布文件都被放到wwwroot/app-${xxx}子目录里,而App Service默认在wwwroot根目录寻找启动程序,自然找不到你的API入口,只能显示默认页面。
2. 手动压缩时的细节遗漏
你手动重新上传仍失败,大概率是没做到这两点:
- 没有直接选中发布输出的所有文件(而是选了包含这些文件的文件夹),导致ZIP里还是带外层目录
- 可能没确认Linux下的可执行权限,自包含应用的入口程序需要有可执行权限才能运行
3. 启动命令可能未正确配置
即使文件路径对了,如果没指定启动命令,Linux App Service可能无法识别你的.NET入口程序。
修复方案
1. 修正GitHub Action的打包逻辑
修改publish作业中的Deploy to Azure步骤,先进入artifact文件夹再打包,确保ZIP根目录直接包含发布文件:
- name: Deploy to Azure uses: azure/CLI@v1 with: azcliversion: 2.52.0 inlineScript: | # 进入artifact文件夹,确保打包的是文件本身而非外层目录 cd app-${{ github.run_number }} zip -r ../app-${{ github.run_number }}.zip . cd .. az webapp deployment source config-zip --resource-group App --name App-zip --src app-${{ github.run_number }}.zip
2. 验证ZIP包结构
打包后本地解压检查,确保ZIP根目录下直接有你的App.Api可执行文件、appsettings.json等核心文件,没有多余的外层文件夹。
3. 配置App Service启动命令(可选)
如果修正后仍无法启动,在App Service的配置 > 常规设置里设置启动命令:
./App.Api
(替换成你实际的可执行文件名,比如项目叫MyApi就写./MyApi)
4. 确认WEBSITE_RUN_FROM_PACKAGE配置
确保WEBSITE_RUN_FROM_PACKAGE=1是在App Service的应用设置里配置的,这个参数会让Azure直接从ZIP包运行应用,无需解压到磁盘。
额外优化建议
- 把
actions/checkout@master换成actions/checkout@v4,使用最新稳定版本 - 如果不需要自包含部署,去掉
dotnet publish里的--self-contained参数,Linux App Service自带.NET 8运行时,能大幅减小包体积 - 在
publish作业里加一步验证artifact路径,提前排查目录问题:
- name: Check Artifact Folder run: | if [ -d "app-${{ github.run_number }}" ]; then echo "Artifact found, files inside:" ls app-${{ github.run_number }} else echo "Artifact folder missing, aborting" exit 1 fi
内容的提问来源于stack exchange,提问作者aherrick
相关产品推荐
相关产品推荐

