DevOps部署.NET 8项目至Linux容器Azure Web Apps路径及Mono依赖问题
.NET8项目Pipeline部署问题解答
一、压缩包路径解析错误的解决办法
你看到的Content/D_C/a/1/s/是Azure Pipeline代理的工作目录绝对路径,这是因为打包时没指定正确的输出目录,把构建机上的完整路径打包进去了。解决步骤:
- 在Pipeline的
dotnet publish步骤中,添加--output参数指定相对输出目录,比如:dotnet publish -c Release -o ./publish - 后续打包操作只针对
./publish目录,这样生成的压缩包就不会包含构建机的绝对路径,部署到Linux容器就能正常解析。
二、为啥ubuntu-24.04构建主机需要Mono?
虽然你的项目只目标net8.0,但如果Pipeline里用了旧版任务(比如NuGetCommand、VSBuild),这些任务即使处理.NET Core项目,也可能依赖Mono完成跨平台兼容操作;另外ubuntu-24.04的默认Pipeline模板可能残留了需要Mono的配置。
解决办法:
- 换成纯.NET Core专属任务,比如用
DotNetCoreCLI任务替代旧的NuGet/VSBuild任务,完全基于.NET SDK运行,不需要Mono。 - 若一定要保留原有任务,可在Pipeline开头加一步安装Mono的脚本:
sudo apt-get update && sudo apt-get install -y mono-complete
三、使用Windows虚拟机构建是否可行?
完全可行。Windows构建机可以正常编译net8.0跨平台项目,生成的部署包同样能在Linux容器中运行。需要注意:
- 同样要在
dotnet publish时指定相对输出目录,避免把Windows的绝对路径打包进去,保证部署到Linux时路径解析正常。
内容的提问来源于stack exchange,提问作者Bluebaron
相关产品推荐
相关产品推荐

