Azure DevOps部署代码:如何避免生成Zip包与多层嵌套文件夹
解决Azure DevOps流水线制品含Zip及Zip目录嵌套问题
问题分析
当前流水线的VSBuild任务使用WebPublishMethod=Package和PackageAsSingleFile=true参数,导致生成Zip包并进入制品库;同时默认的Package发布模式会生成多层嵌套目录,使得可执行文件位于深层路径。
解决方案
方案1:直接发布编译后的文件(推荐)
修改VSBuild任务为文件系统发布模式,不再生成Zip包,同时输出整洁的目录结构:
trigger: - master pool: vmImage: 'windows-latest' variables: solution: '**/*.sln' buildPlatform: 'Any CPU' buildConfiguration: 'Release' steps: - task: NuGetToolInstaller@1 - task: NuGetCommand@2 inputs: restoreSolution: '$(solution)' - task: VSBuild@1 inputs: solution: '$(solution)' # 改用FileSystem发布模式,直接输出到指定目录 msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=FileSystem /p:publishUrl="$(build.artifactStagingDirectory)\PublishedWebApp" /p:SkipInvalidConfigurations=true /p:DeployIisAppPath="Default Web Site"' platform: '$(buildPlatform)' configuration: '$(buildConfiguration)' - task: VSTest@2 inputs: platform: '$(buildPlatform)' configuration: '$(buildConfiguration)' # 若build目录无额外需要发布的文件,可删除此CopyFiles任务 # - task: CopyFiles@2 # inputs: # contents: 'build/**' # targetFolder: '$(Build.ArtifactStagingDirectory)' # cleanTargetFolder: true - task: PublishBuildArtifacts@1 inputs: # 发布VSBuild输出的整洁文件目录 pathtoPublish: '$(build.artifactStagingDirectory)\PublishedWebApp' artifactName: 'drop'
说明:
WebPublishMethod=FileSystem让VS直接将编译后的网站文件输出到publishUrl指定的目录,结构与部署到IIS的预期一致,无深层嵌套。- 若项目没有额外需要从
build目录复制的文件,可删除CopyFiles任务,避免冗余文件进入制品。
方案2:保留Zip包并优化内部结构
若必须保留Zip包,调整VSBuild参数以简化Zip内的目录嵌套:
- task: VSBuild@1 inputs: solution: '$(solution)' msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site" /p:PackageRootFolder=WebContent' platform: '$(buildPlatform)' configuration: '$(buildConfiguration)'
说明:添加/p:PackageRootFolder=WebContent参数,将Zip内的文件统一放在指定根目录下,减少多层嵌套。
内容的提问来源于stack exchange,提问作者Divyang Desai
相关产品推荐
相关产品推荐

