Azure App Service Linux环境下.NET 7启动脚本未执行问题求助
解决Azure Linux App Service中.NET 7启动脚本未执行的问题
可能原因及对应解决方案
1. .NET 7环境启动命令优先级变更
Azure App Service针对.NET 7的Linux容器,默认会优先检测并运行dotnet <项目名>.dll,直接忽略自定义启动脚本。需要明确指定脚本作为入口命令:
- 登录Azure门户,进入目标App Service的配置>常规设置,在启动命令栏填写脚本绝对路径,比如
/home/site/wwwroot/你的脚本文件名.sh - 也可通过Azure CLI设置:
az webapp config set --resource-group <你的资源组名称> --name <你的应用服务名称> --startup-file "/home/site/wwwroot/你的脚本文件名.sh"
2. 脚本缺少可执行权限
Linux环境下脚本无执行权限会直接无法运行,.NET 5环境可能默认赋予了权限,但.NET 7环境需要手动配置:
- 打开App Service的Kudu Bash控制台(访问
https://<你的应用服务名>.scm.azurewebsites.net/Bash) - 执行命令添加权限:
chmod +x /home/site/wwwroot/你的脚本文件名.sh - 也可在部署流程(如GitHub Actions、Azure DevOps)中自动加入该权限设置命令。
3. .NET 7基础镜像的包管理工具差异
.NET 7的Linux基础镜像可能和.NET 5不同(比如部分镜像基于Alpine而非Debian/Ubuntu),导致apt-get命令无法执行:
- 在Kudu控制台手动运行脚本中的每一条命令,排查报错情况
- 若为Alpine镜像,替换包管理命令为
apk:apk update && apk add libc6-compat icu-dev harfbuzz fontconfig freetype - 可在Azure门户配置>常规设置中查看运行时堆栈的详细镜像类型,确认后调整脚本。
4. 脚本语法错误
原脚本中apt-get install -y \ libicu-dev的反斜杠后存在多余空格,会导致命令解析失败,修正后的脚本如下:
#!/bin/bash apt-get update && \ apt-get install -y libc6 -f -o APT::Immediate-Configure=0 && \ apt-get install -y libicu-dev libharfbuzz0b libfontconfig1 libfreetype6 dotnet Api.dll
验证方式
设置完成后重启App Service,通过以下方式确认脚本执行状态:
- 在Azure门户的日志流中查看启动日志,确认脚本是否被调用、依赖是否安装成功
- 进入Kudu控制台的
/home/LogFiles目录,查看stdout.log和stderr.log的输出内容
内容的提问来源于stack exchange,提问作者dna
相关产品推荐
相关产品推荐

