Msbuild 将多个web项目合并到单个输出zip包中

Msbuild 将多个web项目合并到单个输出zip包中,msbuild,azure-devops,azure-app-service-envrmnt,Msbuild,Azure Devops,Azure App Service Envrmnt,我正在使用Visual Studio Online,并正在构建一个持续集成设置。我的场景要求将多个web项目构建到单个Azure应用程序服务部署中。需要注意的是,“开箱即用”创建新生成时,Visual Studio生成任务会为解决方案中的每个项目创建一个单独的zip文件,然后Azure应用程序服务部署任务会抛出一个错误,指出有多个文件与模式匹配,即*.zip 我想做的是将所有这些项目构建到一个位置,将各个项目合并在一起,然后Azure App Service Deploy只需要推送一个zip文件

我正在使用Visual Studio Online,并正在构建一个持续集成设置。我的场景要求将多个web项目构建到单个Azure应用程序服务部署中。需要注意的是,“开箱即用”创建新生成时,Visual Studio生成任务会为解决方案中的每个项目创建一个单独的zip文件,然后Azure应用程序服务部署任务会抛出一个错误,指出有多个文件与模式匹配,即*.zip

我想做的是将所有这些项目构建到一个位置,将各个项目合并在一起,然后Azure App Service Deploy只需要推送一个zip文件,我知道它可以很好地完成。Visual Studio生成任务的MSBuild参数是
/p:DeployOnBuild=true/p:WebPublishMethod=Package/p:PackageAsSingleFile=true/p:SkipinValidConfiguration=true/p:PackageLocation=“$(Build.artifactstagingdirectory)\\”
。我试图删除
PackageAsSingleFile
属性,但它仍然创建了zip文件


我想在VSO中实现的场景是否可能,可能需要一组不同的命令代码?

听起来您需要一个PowerShell脚本或一些任务,以便在发布工件之前操作文件和文件夹

  • $(build.artifactstagindirectory)\*.zip
    $(build.artifactstagindirectory)\Merged
  • $(build.artifactstagindirectory)\Merged
    $(build.artifactstagindirectory)\Merged.zip
  • 我们使用minimatch提取的:
    !/***。邮政编码
  • 将Azure应用程序服务部署更改为查找:
    $(System.DefaultWorkingDirectory)/**/Merged.zip

  • 他们再次更改了产品名称,因此Visual Studio Online不再有效。如果您确实有多个web项目,并且希望一起部署,那么我的建议是使用基于Git的部署,在这种部署中,您可以轻松地以您喜欢的文件夹结构组织文件。部署包(基于Web部署工具)的可定制性较差。这样做会有困难--Visual Studio基于一个“Web app”项目构建==一个zip文件。是否有任何东西阻止您按顺序使用多个app service deploy任务来部署所有zip工件?多个部署任务的最大问题是我们谈论的是X个项目,其中X将在整个过程中发生变化。每次都必须添加一个新的部署任务会更加麻烦;我认为有一些方法可以更好地自动化该过程。不幸的是,我在提取时遇到问题,提取尝试提取archive.xml时失败,但该文件已从以前的存档中提取。有什么想法吗?你有文件名冲突吗?这导致提取失败?每个zip文件都有自己的archive.Xml,不幸的是提取文件任务没有强制覆盖选项。我通过编写powershell脚本解决了这个问题。但是,结果合并并没有被干净地部署。合并的in项目保留其PackageMP目录,因此不在正确的位置。