在Visual Studio中,当我们发布到文件夹时,该文件夹包含我们需要部署的内容。
在Azure Pipeline中,Build Solution任务会生成一堆(对我们来说)不必要的文件和一个zip文件(很好!)。 zip包含我们需要的文件,但隐藏在一个疯狂的深层文件夹路径中:
\Content\D_C\a\1\s\src\MyProject\obj\Release\Package\PackageTmp\our-files.dll
我们希望的是:
\our-files.dll
它还修改web.config中的connectionStrings以支持它附带的部署脚本。我们不需要那个脚本,并且修改是一种痛苦(我们通过将<AutoParameterizationWebConfigConnectionStrings>false</...>
添加到.csproj文件来禁用它 - 哎!)`。
我们尝试使用Build Solution步骤中的参数:
/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\\"
DeployOnBuild
更改为false
导致$(build.artifactsstagingdirectory)为空(导致下一步没有部署)WebPublishMethod
更改为FileSystem
没有任何区别(尝试查找允许值的文档!)PackageAsSingleFile
改为false
做了人们所期望的 - 没有拉链,但内容仍然埋藏在那个深层文件夹结构中。我们的下游脚本可以打开清单文件,xpath输出拉入zip的深层路径(路径总是以d_C
开头吗?),解压缩并从那里抓取内容 - 但是多么痛苦和多么不必要。
有没有办法发布一个很好的干净的构建 - 一个内容的zip文件直接解压缩到与Visual Studio的普通jane相同的文件呢?
在Visual Studio Build步骤中,将“MSBuild Arguments”更改为
/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\\" /p:UseWPP_CopyWebApplication=true /p:OutDir="$(build.artifactstagingdirectory)"
关键是/p:OutDir="$(build.artifactstagingdirectory)“解决目录问题和/ p:UseWPP_CopyWebApplication = true删除web.config.release和web.config.debug
然后将Publish Build Artifacts步骤“发布路径”更新为
$(build.artifactstagingdirectory)\_PublishedWebsites