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)\"
将 DeployOnBuild
更改为 false
导致 $(build.artifactsstagingdirectory) 为空(导致下一步不部署任何内容)
将 WebPublishMethod
更改为 FileSystem
没有任何区别(尝试查找有关允许值的文档!)
将 PackageAsSingleFile
更改为 false
达到了预期的效果 - 没有 zip,但内容仍然隐藏在那个深层文件夹结构中。
我们的下游脚本可以打开清单文件,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
在 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)\"
将
DeployOnBuild
更改为false
导致 $(build.artifactsstagingdirectory) 为空(导致下一步不部署任何内容)将
WebPublishMethod
更改为FileSystem
没有任何区别(尝试查找有关允许值的文档!)将
PackageAsSingleFile
更改为false
达到了预期的效果 - 没有 zip,但内容仍然隐藏在那个深层文件夹结构中。
我们的下游脚本可以打开清单文件,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