Azure DevOps部署ASP.NET Core 8 MVC后变更未生效问题排查
问题描述
通过Azure DevOps将ASP.NET Core 8 MVC应用部署至Azure Web App,流水线运行无报错,但线上站点未显示最新变更,提交记录正确且构建工件生成正常。
流水线YAML核心内容
trigger: - master pool: vmImage: 'windows-latest' variables: - name: solution value: '**/*.sln' - name: buildConfiguration value: 'Release' - name: outputPath value: '$(build.artifactStagingDirectory)/WebApp' - name: webAppZip value: 'WebApp_$(Build.BuildNumber).zip' steps: - task: DotNetCoreCLI@2 displayName: 'Build the project' inputs: command: 'build' projects: '$(solution)' arguments: '--configuration $(buildConfiguration) --no-restore' - task: DotNetCoreCLI@2 displayName: 'Publish ASP.NET Core MVC project' inputs: command: 'publish' projects: '**/*.csproj' arguments: '--configuration $(buildConfiguration) --output $(outputPath) --no-restore' - task: ArchiveFiles@2 displayName: 'Zip publish folder for deployment' inputs: rootFolderOrFile: '$(outputPath)' archiveFile: '$(outputPath)/$(webAppZip)' - task: AzureCLI@2 displayName: 'Enable cleanup of old files' inputs: azureSubscription: 'Your-Service-Connection' scriptType: 'bash' scriptLocation: 'inlineScript' inlineScript: | az webapp config set \ --name QA-app\ --resource-group app \ --generic-configurations "{\"WEBSITE_CLEANUP_FILES\":\"1\"}" - task: AzureWebApp@1 displayName: 'Deploy to Azure Web App' inputs: azureSubscription: 'Your-Service-Connection' appType: 'webApp' appName: 'Your-App-Name' package: '$(outputPath)/$(webAppZip)' deploymentMethod: zipDeploy
已尝试的排查步骤
- 验证ZIP包内包含更新后的文件
- 确认appsettings.json已正确转换
- 部署后手动重启应用
- 验证发布的工件包含新文件
可能的原因及解决方法
1. 部署目标应用名称不匹配
AzureCLI@2任务中配置清理的是名为QA-app的应用,但AzureWebApp@1任务部署的是Your-App-Name,两者名称不一致。如果线上站点是QA-app,实际部署的是另一个未被访问的应用;如果站点是Your-App-Name,清理配置未生效到目标应用,旧文件残留会导致显示旧内容。
解决方法:将两个任务中的appName统一为实际要部署的应用名称。
2. ZIP打包路径错误导致文件嵌套
ArchiveFiles@2任务的rootFolderOrFile设为$(outputPath),archiveFile设为$(outputPath)/$(webAppZip),会导致ZIP包内包含WebApp文件夹,而Azure Web App的zip部署要求网站文件位于ZIP根目录,部署后新文件因嵌套无法被识别。
解决方法:修改ArchiveFiles@2配置,确保打包内容位于ZIP根目录:
- task: ArchiveFiles@2 displayName: 'Zip publish folder for deployment' inputs: rootFolderOrFile: '$(outputPath)' archiveFile: '$(build.artifactStagingDirectory)/$(webAppZip)' includeRootFolder: false
3. WEBSITE_CLEANUP_FILES配置的引号转义错误
AzureCLI@2的bash脚本中使用"转义引号,会导致JSON格式错误,无法正确设置清理配置,旧文件未被删除从而覆盖新内容。
解决方法:改用单引号包裹JSON内容,避免转义问题:
az webapp config set \ --name QA-app\ --resource-group app \ --generic-configurations '{"WEBSITE_CLEANUP_FILES":"1"}'
4. Publish任务匹配过多项目
DotNetCoreCLI@2的publish任务使用**/*.csproj会匹配解决方案中所有项目(如测试项目),可能导致其他项目文件覆盖或干扰主MVC应用的文件。
解决方法:指定具体的Web项目csproj路径,例如:
projects: '**/YourMvcWebProject.csproj'
内容的提问来源于stack exchange,提问作者AllramEst

