Search code examples
asp.netazure-devopsazure-pipelinesvs-web-site-project

How do I use Azure DevOps pipeline to build an ASP.NET web site?


I am working with an older code and attempting to build an ASP.NET website (no .csproj files).

I've created an pipeline for ASP.NET added some tasks to my .yml:

# ASP.NET
# Build and test ASP.NET projects.
# Add steps that publish symbols, save build artifacts, deploy, and more:
# https://learn.microsoft.com/azure/devops/pipelines/apps/aspnet/build-aspnet-4

trigger:
- master

pool:
  vmImage: 'windows-latest'

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'

steps:
- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)"'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

- task: VSTest@2
  inputs:
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

- task: PublishPipelineArtifact@1
  inputs:
    targetPath: '$(Pipeline.Workspace)'
    artifact: 'drop'
    publishLocation: 'pipeline'

However, when I run the pipeline, it fails on the VSBuild task: VSBuildResults

The problem appears to be on line 18 where the -p ..\BOMViewer\ is specifying a directory that doesn't exist.

I may need to follow DJ Grossman's solution later: Can Azure DevOps Pipelines build an ASP.NET Web Site?

But for now, how can I specify -p \BOMViewer instead of the above?

*Update I changed solution to .publishproj from .sln in my YAML per @YashGupta suggestion. But VSBuild doesn't like the change: enter image description here

Final

My .gitignore was ignoring the .publishproj file. Changed that and it worked like charm, per @YashGupta's answer below.


Solution

  • As per my understanding, for an ASP.NET Website you should be using website.publishproj file instead of the .sln file to build it. Because Website projects are actually published, and not built (and that's why the .publishproj files in this case work similar to .csproj files).

    Try modifying the value of your $solution variable to **\*.publishproj instead of **\*.sln.