Azure pipeline - 如何以正常文件结构发布 dotnet MVC 应用程序

问题描述 投票:0回答:1

我有带有多个 csprojs 的 sln。我想获取(在工件中)项目 UserUi.csproj,它是 .NET Framework MVC 应用程序(引用 sln 内的其他库),准备复制到服务器上。

通过运行 yml:

  - 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=FileSystem  /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)\UserUi"'
      platform: "$(buildPlatform)"
      configuration: "$(buildConfiguration)"

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

  - task: PublishBuildArtifacts@1
    inputs:
      PathtoPublish: '$(Build.ArtifactStagingDirectory)\UserUi'
      ArtifactName: 'drop'
      publishLocation: 'Container'

我收到奇怪的“deploy”文件,以及 UserUi.deploy.zip 文件,其中包含正确的文件,但在路径中:

UserUi.zip\Content\D_C\a\1\s\4. SampleLayer\UserUi\obj\Release\Package\PackageTmp

这是为什么呢?我如何才能拥有一个包含 PackageTmp 内容的 zip(或普通文件夹)?

我需要使用服务器上安装的 Azure 代理来发布此(复制到指定文件夹)工件,但使用这种结构我不能。

azure azure-devops azure-pipelines
1个回答
0
投票

使用 VSBuild 和相同的参数时,我可以重现相同的情况。

我怎样才能拥有一个包含 PackageTmp 内容的 zip(或普通文件夹)?

为了满足您的要求,您可以添加以下 vsbuild 参数以直接将输出放入工件文件夹:

/p:DeployOnBuild=true /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl="$(build.artifactStagingDirectory)\\UserUi"

YAML 示例:

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:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl="$(build.artifactStagingDirectory)\\UserUi"'
      platform: '$(buildPlatform)'
      configuration: '$(buildConfiguration)'

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

  - task: PublishBuildArtifacts@1
    inputs:
      PathtoPublish: '$(Build.ArtifactStagingDirectory)\UserUi'
      ArtifactName: 'drop'
      publishLocation: 'Container'

在这种情况下,里面的PackageTmp内容将显示在普通文件夹中。

例如:

enter image description here

如果您需要打包所有文件,可以使用存档文件任务来压缩文件。

更详细的信息,您可以参考这个文档:Deloy Web App

通过 MSBuild 任务(使用默认参数)创建的 Web 包具有嵌套文件夹结构,只能通过 Web Deploy 正确部署。

© www.soinside.com 2019 - 2024. All rights reserved.