部署Azure Linux App Service .NET6时提示dotnet命令未找到
问题原因
Linux版Azure App Service官方镜像已经预装了.NET 6运行时,本地Git部署时出现dotnet: command not found不是运行时未安装,是Kudu触发的部署shell默认没有加载.NET 6对应的PATH环境变量。切换到.NET 3.1时能识别是因为3.1的路径被默认写在了全局PATH的低优先级加载项里,6的路径需要主动加载对应环境脚本才能识别。
操作步骤
- 首先确认运行时栈配置正确:进入App Service的「配置-常规设置」页,确认运行时栈选择为
.NET,版本选择.NET 6 (LTS),点击保存等待实例重启完成,不要使用自定义空镜像或者其他语言栈的镜像创建应用。 - 在你的本地代码仓库根目录新建名为
.deployment的配置文件,指定部署命令执行前先加载dotnet环境变量,文件内容如下:
[config] command = source /etc/profile.d/dotnet.sh && bash deploy.sh
该配置会让Kudu执行部署脚本前,先执行镜像内置的dotnet环境初始化脚本,把dotnet命令所在路径加入当前部署进程的PATH变量,从根源解决命令找不到的问题。
- 清除历史版本残留的部署缓存:打开App Service对应的Kudu控制台,进入SSH终端执行以下命令清理旧的部署文件和缓存:
rm -rf /home/site/wwwroot/* /home/site/deployments/* /tmp/oryx/*
- 回到本地代码仓库,把新增的
.deployment文件提交到Git仓库,重新推送到Azure的Git部署地址,重新触发部署流程即可。
验证方法
部署完成后在Kudu的SSH终端执行dotnet --version,如果返回6.0.x格式的版本号,且站点可以正常访问,说明配置生效。
注意:不要尝试手动在运行中的容器内通过apt或者二进制包方式安装.NET 6,App Service的Linux容器是无状态运行的,实例重启后手动安装的所有内容都会被清空,使用官方镜像预装的运行时是唯一持久化生效的方案。
内容的提问来源于stack exchange,提问作者Colin Bacon
相关产品推荐
相关产品推荐

