部署Azure Web服务时找不到已发布DLL文件的问题排查
排查Azure App Service部署文件找不到问题的实操步骤
1. 先确认dotnet publish的输出路径是否正确
你的命令得确保把发布产物输出到统一的目录,比如用流水线预定义变量$(Build.ArtifactStagingDirectory),命令示例:
dotnet publish Api/Api.csproj -c Debug -o $(Build.ArtifactStagingDirectory)/publish
别用相对路径瞎凑,容易因为工作目录变化搞混,用预定义变量稳得多。
2. 验证publish目录里到底有啥
在dotnet publish之后加个查看目录的命令,Linux代理用ls,Windows用dir,比如:
ls -la $(Build.ArtifactStagingDirectory)/publish
看看里面是不是真有Api.dll,还有配套的web.config、依赖库这些——部署单个DLL肯定不行,得把整个发布目录的文件都带上。
3. 检查Azure App Service部署任务的路径配置
用Azure App Service deploy任务的话,Package or folder字段要填发布目录的路径,比如$(Build.ArtifactStagingDirectory)/publish,不是单个Api.dll的路径!这个任务会自动把目录里的文件打包成ZIP部署,不用你手动弄ZIP包。
4. 别搞混流水线的工作目录
Linux代理下,/home/vsts/work/1/s/是拉源码的目录,$(Build.ArtifactStagingDirectory)对应的是/home/vsts/work/1/a/,别把这俩路径搞混了,部署任务默认会去1/a/下面找东西,要是你把publish输出到1/s/里,肯定找不到。
5. 检查路径匹配模式和文件权限
- 如果任务提示找不到匹配的文件,看看你填的通配符是不是错了,比如填
**/*.dll但文件在publish目录下,得改成publish/**/*.dll,或者直接指定目录。 - 顺便给publish目录加个可读权限,避免代理读不了文件:
chmod -R 755 $(Build.ArtifactStagingDirectory)/publish
6. 扒开部署任务的详细日志看真相
展开部署任务的完整日志,看看代理实际在哪个路径下找文件,和你实际的publish路径对比一下,瞬间就能找到哪里不匹配了。
内容的提问来源于stack exchange,提问作者Konrad Viltersten
相关产品推荐
相关产品推荐

