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

bis*_*314 9 visual-studio azure-pipelines-build-task

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

在 Azure Pipeline 中,Build Solution 任务会生成一堆(对我们来说)不必要的文件和一个 zip 文件(很好!)。zip 包含我们需要的文件,但隐藏在一个疯狂的深文件夹路径中:

\Content\D_C\a\1\s\src\MyProject\obj\Release\Package\PackageTmp\our-files.dll
Run Code Online (Sandbox Code Playgroud)

我们更喜欢的是:

\our-files.dll
Run Code Online (Sandbox Code Playgroud)

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

我们尝试在 Build Solution 步骤中对参数大惊小怪:

/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\\"
Run Code Online (Sandbox Code Playgroud)
  • 更改DeployOnBuildfalse导致 $(build.artifactsstagingdirectory) 为空(导致下一步不部署任何内容)

  • 更改WebPublishMethodFileSystem没有区别(尝试查找有关允许值的文档!)

  • 更改PackageAsSingleFilefalse做人们所期望的 - 没有 zip,但内容仍然隐藏在那个深层文件夹结构中。

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

有没有办法只发布一个很好的干净构建 - 一个 zip 的内容可以直接解压缩到与 Visual Studio 中的纯简发布相同的文件?

Jon*_*nes 12

在 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)"  
Run Code Online (Sandbox Code Playgroud)

关键是 /p:OutDir="$(build.artifactstagingdirectory)" 解决了目录问题,/p:UseWPP_CopyWebApplication=true 删除了 web.config.release 和 web.config.debug

然后将发布构建工件步骤“发布路径”更新为

$(build.artifactstagingdirectory)\_PublishedWebsites
Run Code Online (Sandbox Code Playgroud)

  • 谢谢 - 稍作调整,现在就可以了。但它没有拉链(不是必需的 - 只是有一个很好)。你知道该怎么做了吗? (2认同)
  • Np,你可以添加一个 zip 步骤来解决这个问题。 (2认同)