【问题标题】:How to build pipeline with one .NET desktop app and one Web App in one sln file in Azure Devops如何在 Azure Devops 的一个 sln 文件中使用一个 .NET 桌面应用程序和一个 Web 应用程序构建管道
【发布时间】:2021-03-28 22:04:54
【问题描述】:

我是 Azure Devops 的新手,我现有的应用程序包括门户服务(Web 应用程序)和 .NET 中的桌面应用程序,这是 Visual Studio 中的一个解决方案。构建/发布此类结构化解决方案的最佳方式是什么?

当我选择 asp.net 作为步骤时,它会成功构建并形成 zip。但我认为没有添加 .NET serilog 应用程序。

当我选择 .NET 桌面时,我会在最后收到消息:

##[警告]目录 'D:\a\1\a' 为空。不会添加任何内容来构建工件“drop”。

我想发布到本地 IIS 服务器。下面是

trigger:
- main

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: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'
    publishLocation: 'Container'

【问题讨论】:

  • 为什么还要将控制台应用程序部署到目标服务器?您的 Web 应用程序是否在某些方面依赖于控制台项目?如果没有,则无需将这两个项目部署在同一个工件中。
  • 嗨,Azm,您的问题有更新吗?你能分享一些关于你现在被阻止的细节吗?

标签: azure-devops


【解决方案1】:

如何使用一个 .NET 桌面应用程序和一个 Web 应用程序合二为一地构建管道 Azure Devops 中的 sln 文件

您可以使用 asp.net 模板来创建构建管道。由于它默认指定solution: '**/*.sln',构建任务将构建两个项目。

1.要在IIS服务器上部署Asp.net核心项目,可以在构建管道中发布Web项目的构建工件。然后使用 IIS Web App Manage 任务,IIS Web App Deploy 任务来部署它。

2.关于控制台项目,据我所知,我们没有官方推荐的任务来部署桌面应用程序。相反,您可以使用Windows Machine File Copy task 将 xx.exe 复制到您想要的位置。

(此任务要求您在构建工件中包含 xx.exe,因此您可以将两个项目的输出保留在同一个构建工件中,或者在构建管道中为您的两个项目发布两个构建工件。)

【讨论】:

  • 谢谢兰斯。解决方案是创建两个工件。我听说 .NET 核心在解决方案中支持基于 csproj 的构建,而旧的 ASP 网络应用程序则不支持
【解决方案2】:

当您配置管道时,您可以选择预定义的模板。对于 .NET 桌面应用程序,您应该选择这个:

您可以在here找到更多详细信息

它会为你创建这样的 YAML


trigger:
- main

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)'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

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

现在要让您的桌面应用程序易于部署,您需要publish it as artifact

要构建 ASP.NET 应用程序(我假设这是您的情况),您需要使用 ASP/NET 模板,但实际上您可以在两种情况下都使用此模板。

trigger:
- main

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

在部署方面,这一切都取决于您要在哪里部署应用程序。但如果您部署到 Azure 应用服务,请检查此Deploy a Web Deploy package (ASP.NET)

您的问题缺乏细节,因此很难给您最合适的答案。但我希望这对你有帮助。

【讨论】:

  • 您好 Krzysztof,谢谢。我添加了一些细节。这正是我尝试过的,.NET 应用程序和 Web 应用程序任务,它可以很好地构建 Web 应用程序,但没有为桌面应用程序创建工件。并且我想在本地使用 IIS 服务器,您是否可以像使用 Azure 应用服务一样选择要部署的 zip?
  • 你能分享你的管道吗?在不知道你实际做了什么的情况下回复消息是极其困难的。当然,您始终可以选择要部署的 zip,也可以将其部署到 IIS on prem。
  • 我添加了管道。我还尝试包含基于此线程的任务副本文件:stackoverflow.com/questions/50468925/… C# 应用程序是一些带有 serilog 的报告发送服务,我猜它应该与通过 msdeploy.exe 完成的 Web 应用程序一起部署
猜你喜欢
  • 2023-01-19
  • 1970-01-01
  • 2013-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多