Visual Studio 在线构建步骤 PackageLocation 被忽略

Visual Studio Online build step PackageLocation being ignored

我有一个 Visual Studio 在线构建定义似乎有问题,但我不确定我是否配置错误。

有一个构建步骤配置如下:

类型: Visual Studio 构建

解法:**\mysolutionfile.sln

MSBuild 参数: /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.stagingDirectory)"

构建运行成功,构建日志显示msbuild命令执行如下:

"C:\Program Files (x86)\MSBuild.0\bin\msbuild.exe" "C:\a\s\Code\mysolutionfile.sln" /nologo /nr:false /dl:CentralLogger,(more removed for brevity) /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="C:\a\a" /p:platform="any cpu" /p:configuration="release" /p:VisualStudioVersion="14.0" /p:_MSDeployUserAgent="VSTS_6efdabeb-1c75-43a7-96b2-f40e19a68a35_build_14_122"

如您所见,包位置设置正确:/p:PackageLocation="C:\a\a"

但是,稍后在构建日志中,打包步骤显示此日志条目:

2017-01-20T05:07:30.9771422Z Executing command ["C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy.exe" -source:manifest='C:\Users\buildguest\AppData\Local\Temp\PublishTemp\obj\mysolution55\SourceManifest.xml' -dest:package='C:\a\s\Code\mysolutionfile\bin\Release\MSDeployPackage\mysolutionfile.zip' -verb:sync -replace:match='C:\Users\buildguest\AppData\Local\Temp\PublishTemp\mysolutionfile55\',replace='website\' -retryAttempts:20 -disablerule:BackupRule]

如您所见,在这种情况下,包被发送到 -dest:package='C:\a\s\Code\mysolutionfile\bin\Release\MSDeployPackage\mysolutionfile.zip' - 这确实是 zip 文件的最终目的地。

据我所知,这看起来不对。我希望打包的应用程序二进制文件和文件最终位于暂存目录中,但 msbuild 在某处覆盖了我并将它们放入源签出文件夹中。

如果相关,该解决方案包含两个项目:一个 ASP.NET 以完整 .NET Framework 为目标的核心 Web 应用程序;和一个便携式 class 库。

我在构建配置中做错了什么吗?

我在我的 TFS 环境中重现了您的问题,我得到了相同的结果。 "C:\a\s"文件夹下的包不是“C:\a\a'。

作为解决方法,您可以添加 复制文件 步骤,将包从源文件夹复制到 $(build.stagingDirectory) 路径。

我猜它没有像您预期的那样工作,因为变量名应该是 Build.ArtifactStagingDirectory 而不是 build.stagingDirectory

示例:

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: '/p:Configuration=Release /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(Build.ArtifactStagingDirectory)"'
    #msbuildArgs: '/T:"MyProject1" /p:OutDir=$(Build.ArtifactStagingDirectory) /nowarn:FS0049'

- task: PublishBuildArtifacts@1
  inputs:
    pathtoPublish: '$(Build.ArtifactStagingDirectory)'
    artifactName: MyWebSiteArtefactZIP

还有一种部署方式:

如果您已经创建了发布配置文件(您可以使用 Visual Studio), 也可以直接从 MSBuild 发布,您可以将 Web App username/password 放入 Azure DevOps Pipeline 变量中并使用它们:

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: '/p:Configuration=Release /P:DeployOnBuild=true /P:PublishProfile="MyPublishProfile.pubxml" /P:Username=$(username);Password=$(password)'