首页 > 解决方案 > 在 Azure DevOps 上构建多目标 nuget 包

问题描述

我正在尝试设置 Azure Pipeline 来构建和发布多目标 nuget 包。该解决方案设置了两个项目,为每个项目创建一个 nuget 包

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks>net461;netstandard2.1</TargetFrameworks>
    <AssemblyVersion>2.0.0.0</AssemblyVersion>
    <FileVersion>2.0.0.0</FileVersion>
    <Version>2.0.0</Version>
    <PackageId>TradingService.Messages</PackageId>
    <Authors>Bankinvest</Authors>
    <Product>TradingService.Messages</Product>
    <Description>Package with trade messages.</Description>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
  </PropertyGroup>
</Project>

当我运行这个命令

MSBuild .\TradingService.Messages.sln  -t:Rebuild -p:Configuration=Release

我现在有两个包,每个项目一个。

在文件夹“.\tradingservice.messages\TradingService.Messages\bin\Release”中

net46  (folder)
netstandard2.1 (folder)  
TradingService.Messages.2.0.0.nupkg  

在我刚刚将它复制到文件共享之前,但现在我想将它发布到 Azure 工件

如何在 Azure 管道中设置构建?

标签: azure-devopsmsbuildazure-pipelines

解决方案


这就是我最终的结果。

trigger:
  - master

pool:
  vmImage: 'windows-latest'

variables:
  buildConfiguration: 'Release'
  packageVersion: 'not-set'

steps:

  - task: PowerShell@2
    displayName: 'Create version tag'
    inputs:
      targetType: 'inline'
      showWarnings: true
      script: |
        $tags = git tag --sort=-creatordate
      
        if($tags.Count -gt 0) {
          ${env:MyCompany.Version} = "$($tags[0]).${env:BUILD_BUILDID}"
        }
        else {
          ${env:MyCompany.Version} = "0.0.0.${env:BUILD_BUILDID}"
        }
        echo "##vso[task.setvariable variable=packageVersion]${env:MyCompany.Version}"  
  
  - task: DotNetCoreCLI@2
    displayName: 'dotnet build Messages'
    inputs:
      command: 'build'
      arguments: '-c $(buildConfiguration)'
      projects: 'MyProject/MyProject.csproj'

  - task: DotNetCoreCLI@2
    displayName: 'dotnet pack Messages'
    inputs:
      command: pack
      arguments: '-c $(buildConfiguration) /p:VersionPrefix=$(packageVersion)'
      packagesToPack: 'MyProject/MyProject.csproj'
      nobuild: true
      versioningScheme: off

  - task: NuGetCommand@2
    displayName: 'push messages'
    inputs:
      command: 'push'
      feedsToUse: select      
      packagesToPush: '$(Build.ArtifactStagingDirectory)/**/*.nupkg;!$(Build.ArtifactStagingDirectory)/**/*.symbols.nupkg'
      nuGetFeedType: 'internal'
      publishVstsFeed: 'abd98fce-94bb-4652-82ec-91b7bbb3d2a3'
      allowPackageConflicts: true
      versioningScheme: off

  - task: DotNetCoreCLI@2
    displayName: 'dotnet build Rules'
    inputs:
      command: 'build'
      arguments: '-c $(buildConfiguration)'
      projects: 'TradingService.Rules/TradingService.Rules.csproj'

  - task: DotNetCoreCLI@2
    displayName: 'dotnet pack Rules'
    inputs:
      command: pack
      arguments: '-c $(buildConfiguration) /p:VersionPrefix=$(packageVersion)'
      packagesToPack: 'TradingService.Rules/TradingService.Rules.csproj'
      nobuild: true
      versioningScheme: off

  - task: NuGetCommand@2
    displayName: 'push rules'
    inputs:
      command: 'push'
      feedsToUse: select      
      packagesToPush: '$(Build.ArtifactStagingDirectory)/**/*.nupkg;!$(Build.ArtifactStagingDirectory)/**/*.symbols.nupkg'
      nuGetFeedType: 'internal'
      publishVstsFeed: 'abd98fce-94bx-4652-82xc-91b7xx3d2a3'
      allowPackageConflicts: true
      versioningScheme: off

推荐阅读