4

I have a YAML pipeline that builds & publishes a cs project. I have tried to put a predefined variable in the publish profile however it is throwing an error. I would like the published files to be put into the $(Build.ArtifactStagingDirectory) location so that I can use the Publish Build Artifact task.

I am unsure why when this is run in the agent directory, the variable in the publish profile isn't working as expected.

Error:

Error MSB4184: The expression """.ArtifactStagingDirectory" cannot be evaluated. Method 'System.String.ArtifactStagingDirectory' not found

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 }}'

pubxml:

<?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>
Ross
  • 2,463
  • 5
  • 35
  • 91

1 Answers1

6

You can override the publishUrl in the build arguments:

/p:publishUrl=$(Build.ArtifactStagingDirectory)

So put a placeholder in your pubxml:

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

And in your YAML:

msbuildArguments: '/p:PublishProfile=$(Build.SourcesDirectory)\${{ parameters.Location }}\Properties\PublishProfiles\STARS.Website.Publish.Profile.pubxml /p:publishUrl=$(Build.ArtifactStagingDirectory)'
4c74356b41
  • 69,186
  • 6
  • 100
  • 141
Shayki Abramczyk
  • 36,824
  • 16
  • 89
  • 114