3

我有一个构建和发布一个 cs 项目的 YAML 管道。我试图在发布配置文件中放置一个预定义的变量,但是它抛出了一个错误。我希望将已发布的文件放入该$(Build.ArtifactStagingDirectory)位置,以便我可以使用 Publish Build Artifact 任务。

我不确定为什么当它在代理目录中运行时,发布配置文件中的变量没有按预期工作。

错误:

错误 MSB4184:无法评估表达式“”“.ArtifactStagingDirectory”。找不到方法“System.String.ArtifactStagingDirectory”

YAML:

  - task: MSBuild@1
    displayName: '${{ parameters.Site }} - Publish'
    inputs:
      solution: '*${{ parameters.Location }}/${{ parameters.Site }}.csproj'
      msbuildVersion: '15.0'
      msbuildArchitecture: 'x64'
      platform: 'anycpu'
      configuration: '${{ parameters.Configuration }}'
      msbuildArguments: '/p:PublishProfile=$(Build.SourcesDirectory)\${{ parameters.Location }}\Properties\PublishProfiles\STARS.Website.Publish.Profile.pubxml'


  - task: PublishBuildArtifacts@1
    displayName: 'Publish Artifacts'
    inputs:
      pathtoPublish: '$(Build.ArtifactStagingDirectory)' 
      artifactName: '${{ parameters.Site }}'

发布xml:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <PublishProvider>FileSystem</PublishProvider>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish />
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
    <ExcludeApp_Data>True</ExcludeApp_Data>
    <publishUrl>$(Build.ArtifactStagingDirectory)</publishUrl>
    <DeleteExistingFiles>True</DeleteExistingFiles>
  </PropertyGroup>
</Project>
4

1 回答 1

4

您可以覆盖publishUrl构建参数中的:

/p:publishUrl=$(Build.ArtifactStagingDirectory)

因此,在您的 pubxml 中放置一个占位符:

<publishUrl>Placeholder-You-Want</publishUrl>

在你的 YAML 中:

msbuildArguments: '/p:PublishProfile=$(Build.SourcesDirectory)\${{ parameters.Location }}\Properties\PublishProfiles\STARS.Website.Publish.Profile.pubxml /p:publishUrl=$(Build.ArtifactStagingDirectory)'
于 2020-01-29T13:19:06.470 回答