Azure DevOps 构建任务:创建内容与 Visual Studio 发布相同的 zip

Azure DevOps Build Task: create a zip with contents identical to Visual Studio Publish

在 Visual Studio 中,当我们发布到文件夹时,该文件夹恰好包含我们需要部署的内容。

在 Azure Pipeline 中,构建解决方案任务会生成一堆(对我们来说)不必要的文件和一个 zip 文件(太好了!)。该 zip 包含我们需要的文件,但隐藏在一个疯狂的深层文件夹路径中:

\Content\D_C\a\s\src\MyProject\obj\Release\Package\PackageTmp\our-files.dll

我们更喜欢的是:

\our-files.dll

它还修改了 web.config 中的 connectionStrings 以支持它附带的部署脚本。我们不需要那个脚本,而且修改很麻烦(我们通过将 <AutoParameterizationWebConfigConnectionStrings>false</...> 添加到 .csproj 文件来禁用它 - 糟糕!)`.

我们尝试在构建解决方案步骤中对参数大惊小怪:

/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\"

我们的下游脚本可以打开清单文件,xpath 出烘焙到 zip 中的深层路径(路径总是以 d_C 开头吗?),解压缩并从那里获取内容 - 但多么痛苦,多么不必要。

有没有办法只发布一个漂亮干净的构建 - 一个 zip,其内容直接解压到与来自 Visual Studio 的 plain-jane Publish 相同的文件?

在 Visual Studio 构建步骤中将 "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 步骤 "Path to publish" 更新为

$(build.artifactstagingdirectory)\_PublishedWebsites