首页 > 解决方案 > 如何通过管道 UI 将自包含的 dotnet 核心包发布到 azure 工件?

问题描述

我已经使用 dotnet core 创建了一个应用程序。我将它构建为一个独立的包。我正在尝试使用管道 UI 将其发布到 Azure 工件服务器。我已经能够成功构建自包含包,并且能够成功将其发布到 drop。我无法弄清楚如何获取 NuGet 包命令(以及后续的 Nuget 推送)来获取独立包以作为可下载包放置在工件服务器上。

这是我的发布任务的 YAML:

steps:

- task: DotNetCoreCLI@2

  displayName: 'dotnet publish'

  inputs:

    command: publish

    publishWebProjects: false

    projects: '**/TelemetryReceiver.csproj'

    arguments: '-c release -r win-x64 --self-contained true'

这是复制以构建登台的任务的 YAML:

您的构建管道引用“BuildConfiguration”变量,您已选择该变量可在排队时设置。为此 YAML 文件创建或编辑构建管道,在“变量”选项卡上定义变量,然后选择选项以使其在排队时可设置。请参阅https://go.microsoft.com/fwlink/?linkid=865971

steps:

- task: CopyFiles@2

  displayName: 'Copy Files to: $(build.artifactstagingdirectory)'

  inputs:

    SourceFolder: '$(build.sourcesdirectory)'

    Contents: '**\bin\$(BuildConfiguration)\**'

    TargetFolder: '$(build.artifactstagingdirectory)'

Here is the YAML for publish:

steps:

- task: PublishBuildArtifacts@1

  displayName: 'Publish Artifact: drop'

  inputs:

    PathtoPublish: '$(build.artifactstagingdirectory)\src\TelemetryReceiver\bin\Release\netcoreapp2.2\win-x64'

And here is the YAML for the NuGet pack:

steps:

- task: NuGetCommand@2

  displayName: 'NuGet pack'

  inputs:

    command: pack

    packagesToPack: src/telemetryreceiver/telemetryreceiver.csproj

    versioningScheme: byPrereleaseNumber

在复制步骤中,日志表明完整的独立包确实被复制到“\src\TelemetryReceiver\bin\Release\netcoreapp2.2\win-x64”。但是最后一个包是从工件服务器下载的,它只是拾取“netcoreapp2.2”目录的内容。

当然,我对“dotnet publish”和“NuGet pack”任务应该如何关联感到困惑。似乎两者都独立评估.csproj文件,就是这样。

标签: .net-coreazure-devopsnuget-packageself-contained

解决方案


如何通过管道 UI 将自包含的 dotnet 核心包发布到 azure 工件?

你可能误解了 task dotnet publish,它不是用来发布 nuget 包的。它用于创建.zip准备发布到 Web 应用程序的文件存档:

查看文档部署 Web 应用程序以获取更多详细信息。

作为测试,您可以查看 that 的内容.zip

在此处输入图像描述

要通过管道 UI 将自包含的 dotnet 核心包发布到 azure artifacts,您只需要使用Copy taskand PublishBuildArtifacts task

之所以只提取“netcoreapp2.2”目录的内容,是因为你在中的语法不正确Contentscopy task应该指定到.nupkg

 Contents: '**\bin\$(BuildConfiguration)\**\*.nupkg'

然后,在工件中:

在此处输入图像描述

或者,我们可以$(Build.ArtifactStagingDirectory)nuget pack任务中指定包文件夹:

在此处输入图像描述

在这种情况下,我们不需要复制任务将包复制到ArtifactStagingDirectory,只需使用任务PublishBuildArtifacts

希望这可以帮助。


推荐阅读