使用DevOps Service的publish profile部署Web应用到Azure时报错找不到pubxml
问题根因
你提交到Azure Repo的.pubxml文件仅存在于源代码目录,CI管道默认的构建、制品打包步骤不会自动将该类配置文件纳入最终发布的制品中,因此发布管道拉取到的制品目录D:\a\r1\a\下不存在对应文件,触发匹配报错。
前置检查
先确认以下基础配置正确:
- Visual Studio生成的.pubxml文件存放在项目目录的
Properties/PublishProfiles/路径下 - 该文件已成功推送到Azure Repo对应运行分支
修复步骤
分两种管道配置场景调整CI流程,将.pubxml文件纳入制品:
场景1:Azure Repos Git(YAML配置)
在CI构建的YAML文件中,dotnet publish步骤之后添加复制文件任务,示例如下:
- task: CopyFiles@2 inputs: # 替换为你实际项目对应的pubxml存放相对路径 SourceFolder: '$(Build.SourcesDirectory)/你的项目名称/Properties/PublishProfiles' Contents: '*.pubxml' TargetFolder: '$(Build.ArtifactStagingDirectory)/PublishProfiles' OverWrite: true
确认后续的制品发布任务(PublishBuildArtifacts/PublishPipelineArtifact)的发布源为$(Build.ArtifactStagingDirectory),保存后重新运行CI管道即可。
场景2:经典编辑器(无YAML配置)
在CI构建管道中添加任务:
- 在「dotnet publish」或「构建解决方案」步骤后,新增复制文件任务:
- 源文件夹:填写项目pubxml存放的相对路径,示例:
$(Build.SourcesDirectory)/WebAppTest/Properties/PublishProfiles - 内容:填写
*.pubxml - 目标文件夹:填写
$(Build.ArtifactStagingDirectory)/PublishProfiles
- 源文件夹:填写项目pubxml存放的相对路径,示例:
- 检查「发布生成工件」任务,确认发布的源路径为
$(Build.ArtifactStagingDirectory) - 保存管道后重新运行CI流程
验证方法
CI运行完成后,进入本次CI运行详情的「工件」标签,查看发布的制品中是否包含PublishProfiles文件夹及对应.pubxml文件,确认存在后再运行发布管道,原路径匹配规则$(System.DefaultWorkingDirectory)/**/*.pubxml可正常识别到文件。
注意:.pubxml文件若包含部署密钥等敏感信息,请勿直接提交到公开代码仓库,私有仓库建议做好权限管控。
内容的提问来源于stack exchange,提问作者16951A0457 MANDA SINEETH KUMAR
相关产品推荐
相关产品推荐

