简体   繁体   中英

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

In Visual Studio, when we publish to a folder, that folder contains exactly what we need to deploy.

In Azure Pipeline, the Build Solution task produces aa bunch of (to us) unnecessary files plus a zip file (nice!). The zip contains the files we need, but buried in an crazy deep folder path:

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

What we would prefer is:

\our-files.dll

It also modifies connectionStrings in the web.config to support the deploy script it ships with. We don't need that script and that modification is a pain (which we disabled by adding <AutoParameterizationWebConfigConnectionStrings>false</...> to the .csproj file - yuck!)` .

We tried fussing with the parameters in the Build Solution step:

/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\\"
  • Changing DeployOnBuild to false caused the $(build.artifactsstagingdirectory) to be empty (causing the next step to deploy nothing)

  • Changing WebPublishMethod to FileSystem made no difference (try finding documentation on the allowed values!)

  • Changing PackageAsSingleFile to false did what one would expect - no zip, but the contents were still buried in that deep folder structure.

Our downstream script could open the manifest file, xpath out the deep path baked into the zip (does the path always start with d_C ?), unzip and grab the contents from there - but what a pain and how unnecessary.

Is there a way to publish just a nice clean build - a zip with contents that directly unpacks to the same files as a plain-jane Publish from Visual Studio does?

In the Visual Studio Build step change "MSBuild Arguments" to

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

The key thing is /p:OutDir="$(build.artifactstagingdirectory)" resolves the directory issue and /p:UseWPP_CopyWebApplication=true removes web.config.release and web.config.debug

Then update Publish Build Artifacts step "Path to publish" to

$(build.artifactstagingdirectory)\_PublishedWebsites

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM