Azure DevOps管道中dotnet publish后删除指定配置文件的最简方案
解决方法:解压后删除目标文件再重新打包
Ubuntu容器默认自带unzip和zip命令,完全可以用原生命令处理已生成的zip包,不需要额外工具,也不用修改项目文件(保留本地调试的Content设置)。具体步骤如下:
- 先执行原有
dotnet publish任务,保留zipAfterPublish: true生成包含配置文件的zip包 - 解压zip到临时目录
- 在临时目录中删除指定的配置文件
- 重新打包临时目录内容,覆盖原zip包
- 继续执行后续的制品上传任务
具体YAML示例
假设你的publish输出zip路径为$(Build.ArtifactStagingDirectory)/publish.zip,可以在publish任务后添加以下脚本任务:
# 原有dotnet publish任务 - task: DotNetCoreCLI@2 displayName: 'dotnet publish' inputs: command: 'publish' projects: '**/*.csproj' publishWebProjects: false arguments: '-c $(BuildConfiguration) -o $(Build.ArtifactStagingDirectory)' zipAfterPublish: true # 新增处理zip包的脚本任务 - script: | # 定义路径变量 ZIP_FILE=$(Build.ArtifactStagingDirectory)/publish.zip TEMP_FOLDER=$(Build.ArtifactStagingDirectory)/temp_publish # 创建临时目录 mkdir -p $TEMP_FOLDER # 解压zip到临时目录 unzip $ZIP_FILE -d $TEMP_FOLDER # 删除目标配置文件 rm -f $TEMP_FOLDER/appsettings*.json rm -f $TEMP_FOLDER/appconfig*.json rm -f $TEMP_FOLDER/log4net*.config # 删除原zip文件 rm $ZIP_FILE # 重新打包临时目录内容为新zip cd $TEMP_FOLDER zip -r ../publish.zip . # 清理临时目录(可选) rm -rf $TEMP_FOLDER displayName: 'Remove unwanted config files from publish zip' workingDirectory: $(Build.ArtifactStagingDirectory)
关键说明
- 全程使用Ubuntu原生命令,避开了无法使用
ArchiveFiles@2的限制 - 完全保留本地项目的
Build Action: Content配置,不影响本地调试 - 脚本路径可根据你的实际publish输出路径调整,确保
ZIP_FILE指向正确的zip文件
内容的提问来源于stack exchange,提问作者Miro J.
相关产品推荐
相关产品推荐

