MsBuild Task on Azure DevOps: with different configuration for dependent projects
Asked Answered
C

1

1

i have one solutions with multiple projects.

DSS.DMN.Client project dependens on other projects(have references)

This is how my yaml files looks like

- task: MSBuild@1
  displayName: 'Build solution Client'
  inputs:
    platform: anyCPU
    maximumCpuCount: true
    configuration: 'Integration' 
    solution: DSS.DMN.Client

- task: CopyFiles@2
  inputs:
    SourceFolder: '$(Build.SourcesDirectory)'
    Contents: '**\bin\**'
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

- task: PublishBuildArtifacts@1    
  displayName: 'Publish Artifact: drop'
  inputs:
    PathtoPublish: '$(build.artifactstagingdirectory)'

the thing is that Client have configuration as INT but the other two dependent projects have configuration as debug.

now when i run the build i get the error:

##[error]C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(777,5): Error : The OutputPath property is not set for project 'DSS.DMN.AVModule.csproj'.  Please check to make sure that you have specified a valid combination of Configuration and Platform for this project.  Configuration='INT'  Platform='AnyCPU'.  You may be seeing this message because you are trying to build a project without a solution file, and have specified a non-default Configuration or Platform that doesn't exist for this project.

the problem is build is trying to find INT configration for the project for DSS.DMN.AVModule.csproj though it have only debug configuration.

question: How do i provide differernt configation on my build pipeline for different project in a single build?

Calque answered 7/5, 2020 at 15:10 Comment(2)
Have you tried build each project with msbuild task in the pipeline, then copy the dlls file to the referenceing project?Chandless
@LeoLiu-MSFT: i converted the MsBuild to vsbuild@1 and it worked.Calque
P
3

try this - attention in folder src/ my project is under src root folder

name: functions-name

trigger:
  branches:
    include:
    - main
  paths:
    include:
    - src/*
    exclude:
    - README.md

variables:
- name: functionAppName
  value: 'func-name-env'
- name: azureSubscriptionENV
  value: 'Azure ENV'
- name: vmImageName
  value: 'windows-2019'
- name: workingDirectory
  value: 'src/xxx.Functions'
- name: systemName
  value: BatchAllocation

pool:
  vmImage: $(vmImageName)

stages:
- stage: Build
  displayName: Build stage

  jobs:
  - job: Build
    displayName: Build
    workspace:
      clean: all

    pool:
      vmImage: $(vmImageName)

    steps:

    - task: NuGetCommand@2
      inputs:
        command: 'restore'
        restoreSolution: '**\*.sln'
        feedsToUse: 'config'
        noCache: false
    
    - task: VSBuild@1
      inputs:
        solution: '**\*.sln'
        msbuildArgs: '/p:DeployOnBuild=true /p:SkipInvalidConfigurations=false /p:OutDir="$(System.DefaultWorkingDirectory)\publish_output"'
        platform: 'Any CPU'
        configuration: 'Release'

    - task: ArchiveFiles@2
      displayName: 'Archive files'
      inputs:
        rootFolderOrFile: '$(System.DefaultWorkingDirectory)/publish_output'
        includeRootFolder: false
        archiveType: zip
        archiveFile: $(Build.ArtifactStagingDirectory)/$(systemName)-v$(Build.BuildId).zip
        replaceExistingArchive: true

    - publish: $(Build.ArtifactStagingDirectory)/$(systemName)-v$(Build.BuildId).zip

enter image description here

Pisgah answered 10/3, 2021 at 21:28 Comment(3)
Thank you so much for you reply. unfortunately i am no more working on that project, so cant test it anymore. However i thanks a million for your reply. Upvoted this. hope the solution helps me in future. Thanks again.Calque
Felipe, great yaml, I have a question regarding the publish. Where do you publish that zip file?Peaceable
The zip file will be published on your pipeline. There will be an option with published files ...I will update this topic with a image @PeaceablePisgah

© 2022 - 2024 — McMap. All rights reserved.