Azure YAML流水线:Zip制品发布下载及OneBranch转换后报错排查
问题解决指南
一、修复「Microsoft.WebApplication.targets 找不到」错误
该错误源于你的Web项目基于**.NET Framework**(非ASP.NET Core),而DotNetCoreCLI@2依赖的.NET Core SDK不包含旧式Web项目所需的Microsoft.WebApplication.targets文件。解决方法:
- 替换
DotNetCoreCLI@2为MSBuild@1任务,MSBuild会加载Visual Studio相关目标文件:- task: MSBuild@1 displayName: Publish Web Solution inputs: solution: '{solutionpath}' msbuildArguments: '/p:Configuration=Release /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(REPOROOT)/obartifacts"' - 确保流水线代理已安装ASP.NET和Web开发工作负载(OneBranch默认代理已包含,自定义代理需手动安装)。
二、生成并发布Zip格式制品
当前配置存在两个核心问题导致无法看到Zip文件:
- 路径格式异常:YAML中建议使用正斜杠路径
$(REPOROOT)/obartifacts,避免Windows风格反斜杠的转义问题;同时移除arguments中的单引号,防止解析错误。 - 缺少制品上传步骤:生成的Zip文件仅存于代理本地目录,需显式发布到Azure DevOps制品库。
针对.NET Framework项目的完整配置
- task: MSBuild@1 displayName: Publish Web Solution inputs: solution: '{solutionpath}' msbuildArguments: '/p:Configuration=Release /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(REPOROOT)/obartifacts"' - task: PublishBuildArtifacts@1 displayName: Publish Zip Artifact inputs: PathtoPublish: '$(REPOROOT)/obartifacts' ArtifactName: 'WebPackage' publishLocation: 'Container'
针对ASP.NET Core项目的完整配置
如果你的项目是ASP.NET Core,修正DotNetCoreCLI@2配置并添加制品发布步骤:
- task: DotNetCoreCLI@2 displayName: Publish Web Solution inputs: command: 'publish' publishWebProjects: false projects: '{solutionpath}' arguments: '--configuration Release --output $(REPOROOT)/obartifacts' zipAfterPublish: true modifyOutputPath: false - task: PublishBuildArtifacts@1 displayName: Publish Zip Artifact inputs: PathtoPublish: '$(REPOROOT)/obartifacts' ArtifactName: 'WebPackage' publishLocation: 'Container'
关键提示
zipAfterPublish: true仅对ASP.NET Core项目生效,.NET Framework项目需通过MSBuild的PackageAsSingleFile=true参数生成Zip包。- 必须添加
PublishBuildArtifacts@1任务,否则无法在Azure DevOps制品库中看到并下载Zip文件。
内容的提问来源于stack exchange,提问作者Duk
相关产品推荐
相关产品推荐

