Azure Web App(Linux) Run From Package无法识别.NET 8应用或找到启动DLL
解决Linux Azure Web App通过Run From Zip部署后无法找到.runtimeconfig.json的问题
问题根源
- 环境变量不匹配:
WEBSITE_RUN_FROM_PACKAGE=1仅适用于Windows版Web App,Linux环境对应的运行变量是WEBSITE_RUN_FROM_ZIP,二者的运行机制存在差异(Linux是直接挂载ZIP包而非解压)。 - ZIP包结构错误:
ArchiveFiles@2任务若未正确配置,会将发布产物的上层目录(如publish文件夹)也打包进ZIP,导致Web App挂载后无法在根路径找到.runtimeconfig.json和启动DLL,转而加载默认的hostingstart.dll。
修复步骤
1. 修正DotNetCoreCLI发布任务
确保发布产物直接输出到指定目录,且不自动打包:
- task: DotNetCoreCLI@2 displayName: '发布应用' inputs: command: 'publish' publishWebProjects: false projects: '**/*.csproj' arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)/publish' zipAfterPublish: false
2. 修正ArchiveFiles打包任务
关键设置includeRootFolder: false,确保ZIP根目录直接包含所有发布文件,无嵌套上层文件夹:
- task: ArchiveFiles@2 displayName: '打包发布产物为ZIP' inputs: rootFolderOrFile: '$(Build.ArtifactStagingDirectory)/publish' includeRootFolder: false archiveType: 'zip' archiveFile: '$(Build.ArtifactStagingDirectory)/app.zip' replaceExistingArchive: true
3. 修正AzureRmWebAppDeployment部署任务
明确指定Linux应用类型和Run From Zip部署方式:
- task: AzureRmWebAppDeployment@4 displayName: '部署到Linux Web App' inputs: azureSubscription: '你的Azure服务连接名称' appType: 'webAppLinux' WebAppName: '你的Web App名称' packageForLinux: '$(Build.ArtifactStagingDirectory)/app.zip' deploymentMethod: 'runFromZip'
4. 配置正确的环境变量
在Azure门户的Web App配置中,添加或更新环境变量:
- 变量名:
WEBSITE_RUN_FROM_ZIP - 变量值:
1(若使用外部存储的ZIP包,可直接填写对应URL)
验证步骤
- 下载流水线生成的
app.zip,解压后确认根目录下存在.runtimeconfig.json和你的启动DLL文件,无嵌套文件夹。 - 部署完成后,查看Web App的日志流(Azure门户 -> 你的Web App -> 监控 -> 日志流),确认应用已正确加载启动DLL。
内容的提问来源于stack exchange,提问作者Blair Harper
相关产品推荐
相关产品推荐

