【问题标题】:How to publish .NET "Release" artifact?如何发布.NET“发布”工件?
【发布时间】:2021-03-31 03:17:55
【问题描述】:

我需要为 MSBuild“发布”的发布任务中的根文件/文件夹指定什么?

.NET 版本基本上是二进制文件吗?因为对于 AngularOutput 构建,我必须指定 AngularOutput 的路径,但对于 .NET Release,我不确定那会是什么路径,我认为它是整个项目,这意味着......它的二进制文件?

预期的工件:

更新: 根据 Kevin 的 YAML 生成的工件:

在 _PublishedWebsites 内


在更新 3 之后,在 windows 代理上运行时:

更新#4:使用 VSBuild

steps:
- task: VSBuild@1
  displayName: '.Net build | Build solution'
  inputs:
    solution: 'Project123/*.csproj'
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactstagingdirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'
    platform: AnyCPU
    configuration: Release
    msbuildArchitecture: x64

结果一样,放在长路径中:

update#5:改用 /p:PublishProfile=Project123.pubxml MSBuild arg,并在 Windows 代理上运行,构建完成得很好,但这次我收到了发布任务的警告:

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

我尝试将 /p:OutputPath=$(build.artifactstagingdirectory) 添加到 MSBuild args 以及发布配置文件 arg 中,结果与我之前发布的相同:

备注:

实际上我们还需要/p:DeployOnBuild=true吗?我知道这是部署,但我认为我们不希望或不应该在管道中部署,因为我们有一个专门用于将已发布的工件部署到应用服务的版本。

【问题讨论】:

  • 嗨@Cataster。根据我的测试,输出内容与 msbuild 参数有关。请参考我的更新 3 并检查它是否可以进行一些更改
  • @KevinLu-MSFT 我用 update3 yaml 更新了管道,所以我禁用了存档,按照建议添加了 MSBuild 参数,并修改了 pathToPublish $(build.ArtifactStagingDirectory)/$(Build.BuildId).zip -> $(build.ArtifactStagingDirectory)。然而,这一次并没有产生任何神器。收到以下警告:##[warning]Directory '/home/vsts/work/1/a' is empty. Nothing will be added to build artifact 'Release'.
  • @KevinLu-MSFT 我在 windows 代理上对其进行了测试,看起来它确实产生了与 linux 代理不同的东西,但是路径很长。内容并不完全位于根目录。这可能就是为什么在 linux 代理中,根据我上面的评论,它无法找到我认为的任何内容。所以即使在 Windows 上,它也与预期的工件不完全匹配
  • 您能否尝试使用 VS Build 任务在 Microsoft 托管代理上运行相同的参数?另一方面,根据我们之前的讨论,您可以将/p:DeployOnBuild=true /p:PublishProfile=xxxx 添加到构建参数以使用发布配置文件。请检查它是否可以进行一些更改
  • @KevinLu-MSFT 请查看我的更新 4 和 5

标签: azure-devops azure-pipelines-build-task azure-devops-pipelines


【解决方案1】:

我需要为 MSBuild“发布”的发布任务中的根文件/文件夹指定什么?

当您使用 Msbuild 任务构建项目时,输出文件将默认保存在 Bin 文件夹。例如:$(build.sourcesdirectory)/Projectname/bin

根据您的项目结构,具体路径可能会有所不同。

我建议您可以在 Msbuild 任务中添加 msbuild 参数(例如 /p:OutputPath=$(build.artifactstagingdirectory))。

例如:

在这种情况下,您可以将特定路径设置为输出路径。这将使您更轻松地归档和发布工件。

更新:

Ubuntu 代理:

如果我不设置 msbuild arg,输出文件将显示在 bin 文件夹中:

当我添加 msbuild arg 时,它会将文件上传到目标路径:

它们具有相同的工件内容。

更新2:

您可以尝试以下示例为 Azure APP 服务创建包。

经典:

Yaml:

steps:
- task: NuGetToolInstaller@0
  displayName: 'Use NuGet 4.4.1'
  inputs:
    versionSpec: 4.4.1

- task: NuGetCommand@2
  displayName: 'NuGet restore'
  inputs:
    restoreSolution: Sample.sln

- task: MSBuild@1
  displayName: 'Build solution Sample.sln'
  inputs:
    solution: Sample.sln
    platform: '$(BuildPlatform)'
    configuration: Release
    msbuildArguments: '/p:OutputPath=$(build.artifactstagingdirectory)'

- task: ArchiveFiles@2
  displayName: 'Archive $(Build.ArtifactStagingDirectory)'
  inputs:
    rootFolderOrFile: '$(Build.ArtifactStagingDirectory)'

- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact'
  inputs:
    PathtoPublish: '$(build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
  condition: succeededOrFailed()

结果:

更新3:

steps:
- task: NuGetToolInstaller@0
  displayName: 'Use NuGet 4.4.1'
  inputs:
    versionSpec: 4.4.1

- task: NuGetCommand@2
  displayName: 'NuGet restore'
  inputs:
    restoreSolution: Sample.sln

- task: MSBuild@1
  displayName: 'Build solution Sample.Web/Sample.Web.csproj'
  inputs:
    solution: Sample.Web/Sample.Web.csproj
    platform: '$(BuildPlatform)'
    configuration: Release
    msbuildArguments: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactstagingdirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'


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

【讨论】:

  • 我明白了,但是在 Ubuntu 代理上运行时,MSBuild args 是否有效?我今天用包括 MSDeploy 和 Setting 包在内的一堆选项运行它,但我觉得它没有效果......
  • 嗨@Cataster。对于参数:/p:OutputPath=$(build.artifactstagingdirectory) 根据我的测试,构建参数可以将输出文件传递到正确的路径。它可以在 Ubuntu 代理上按预期工作。
  • 我在其中一张图片中意识到这是一个 netcore 应用程序。这对 .NET Framework 应用程序是否同样有效? (不是 .NET Core)
  • @Cataster 知道了会测试和检查
  • 谢谢。在存档任务中Archive File to Create 的值是多少? $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip 是否与发布任务中的 pathtopublish 相同?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-29
  • 2020-01-11
  • 1970-01-01
  • 2018-11-04
  • 1970-01-01
  • 2021-11-10
相关资源
最近更新 更多