You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps YAML管道中MSBuild构建后发布工件为空,如何访问Release文件夹?

解决Azure DevOps Pipeline中PublishBuildArtifacts生成空工件的问题

这个问题我之前也碰到过,核心原因其实是MSBuild默认将编译输出放在项目自身的bin/Release目录下,而Azure DevOps的PublishBuildArtifacts@1任务默认会从$(Build.ArtifactStagingDirectory)(也就是日志里的D:\a\1\a)读取文件——两者路径不匹配,所以最终生成的drop工件是空的。

下面给你两种可行的解决方案,按需选择:

方案1:让MSBuild直接输出到工件暂存目录

修改你的MSBuild@1任务,在msbuildArguments中添加输出目录参数,让编译产物直接生成到$(Build.ArtifactStagingDirectory):

- task: MSBuild@1
  inputs:
    solution: '**/Beper-EDI.sln'
    platform: '$(BuildPlatform)'
    configuration: '$(BuildConfiguration)'
    msbuildArguments: '/p:OutDir=$(Build.ArtifactStagingDirectory)\'
    clean: true
    # 其他保留的配置项...

这样MSBuild会把所有编译好的文件直接放到暂存目录,后续的PublishBuildArtifacts@1任务就能正常抓取到内容了。

方案2:添加复制任务,把编译产物同步到暂存目录

如果你不想修改MSBuild的默认输出路径,可以在MSBuild任务之后、发布任务之前,新增一个CopyFiles@2任务,将项目bin/Release下的文件复制到暂存目录:

# 原有的MSBuild任务保持不变
- task: MSBuild@1
  inputs:
    solution: '**/Beper-EDI.sln'
    platform: '$(BuildPlatform)'
    configuration: '$(BuildConfiguration)'
    clean: true
    # 其他配置项...

# 新增复制文件任务
- task: CopyFiles@2
  inputs:
    SourceFolder: '$(Build.SourcesDirectory)' # 代码拉取的根目录,对应D:\a\1\s
    Contents: '**/bin/$(BuildConfiguration)/**' # 匹配所有项目的Release目录下的文件
    TargetFolder: '$(Build.ArtifactStagingDirectory)' # 工件暂存目录,对应D:\a\1\a

# 原有的发布任务保持不变
- task: PublishBuildArtifacts@1
  inputs:
    ArtifactName: 'drop'
    pathToPublish: '$(Build.ArtifactStagingDirectory)'

这里用$(BuildConfiguration)变量代替硬编码的Release,能让配置更灵活,适配不同的编译环境。

执行完上述修改后,再运行流水线,drop工件就能包含你编译好的所有文件了。

内容的提问来源于stack exchange,提问作者Bastien Vandamme

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 06:53:18