如何使用 Azure DevOps 管道构建 ASP.NET 网站?

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

我正在使用旧代码并尝试构建一个 ASP.NET 网站(没有 .csproj 文件)。

我已经为 ASP.NET 创建了一个管道,向我的 .yml 添加了一些任务:

# ASP.NET
# Build and test ASP.NET projects.
# Add steps that publish symbols, save build artifacts, deploy, and more:
# https://docs.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'

但是,当我 运行 管道时,它在 VSBuild 任务上失败了:

问题似乎出在第 18 行,其中 -p ..\BOMViewer\ 指定的目录不存在。

稍后我可能需要遵循 DJ Grossman 的解决方案:

但是现在,我如何指定 -p \BOMViewer 而不是上面的?

*更新 根据@YashGupta 的建议,我在我的 YAML 中将解决方案从 .sln 更改为 .publishproj。但是 VSBuild 不喜欢这种变化:

决赛

我的 .gitignore 忽略了 .publishproj 文件。根据下面@YashGupta 的回答,改变了它并且它像魅力一样工作。

据我了解,对于 ASP.NET 网站,您应该使用 website.publishproj 文件而不是 .sln 文件来构建它。因为网站项目实际上是发布的,而不是构建的(这就是为什么 .publishproj 文件在这种情况下的工作方式类似于 .csproj 文件)。

尝试将 $solution 变量的值修改为 **\*.publishproj 而不是 **\*.sln