Azure 管道生成的 NuGet 包不会安装“看起来是空的” 经典流水线YAML 管道

问题描述

NuGet 包“似乎是空的”

我有一个创建两个 .dll 文件解决方案。

  • JReyLibrary - 一些常用功能和控件。
  • JRTestLib - 测试有帮助。

我能够使用 classic pipeline 为两者构建 NuGet 包并安装到应用程序中。 当我更改为 YAML 管道时,我能够构建包,但不会安装在应用程序中。

安装没有错误,但没有出现在参考资料中。

我很困惑,有些文档说如果我有 .nuspec 文件,我不需要 .csproj 文件

我没有 *[library]*.nuspec 文件

观察

检查 .nuget\packages[library] 发现目录结构不同。

经典流水线

以下是一个旧版本,在VS项目参考中加载并可见。这是使用 classic pipeline 创建的。

 Directory of C:\Users\james\.nuget\packages\jrtestlib\0.14.6535.24741

07/30/2020  07:39 AM    <DIR>          .
07/30/2020  07:39 AM    <DIR>          ..
07/30/2020  07:39 AM               130 .nupkg.Metadata
07/30/2020  07:39 AM             7,561 jrtestlib.0.14.6535.24741.nupkg
07/30/2020  07:39 AM                88 jrtestlib.0.14.6535.24741.nupkg.sha512
11/22/2017  01:45 PM               605 jrtestlib.nuspec
07/30/2020  07:39 AM    <DIR>          lib
               4 File(s)          8,384 bytes

 Directory of C:\Users\james\.nuget\packages\jrtestlib\0.14.6535.24741\lib

07/30/2020  07:39 AM    <DIR>          .
07/30/2020  07:39 AM    <DIR>          ..
07/30/2020  07:39 AM    <DIR>          net40
               0 File(s)              0 bytes

 Directory of C:\Users\james\.nuget\packages\jrtestlib\0.14.6535.24741\lib\net40

07/30/2020  07:39 AM    <DIR>          .
07/30/2020  07:39 AM    <DIR>          ..
11/22/2017  01:45 PM            11,264 JRTestLib.dll
               1 File(s)         11,264 bytes

     Total Files Listed:
               5 File(s)         19,648 bytes
               8 Dir(s)  389,112,635,392 bytes free

注意:.dll 文件包含在 .\lib\net40 目录中。

我无法显示 classic pipeline 步骤,因为它说我无法嵌入图像。

有一项我无法转换为 YAML。 Output Variables 选项包含 NuGetPackager_5 (JReyLibrary) 和 NuGetPackager_11 (JRTestLib)。

我还注意到发布者任务在复制文件任务之前。

YAML 管道

这个包是使用 YAML 来创建包的。 这些包安装没有错误,但没有显示在项目的参考资料中。

找到以下目录结构。

 Directory of C:\Users\james\.nuget\packages\jrtestlib\0.16.20201211.7

12/11/2020  03:09 PM    <DIR>          .
12/11/2020  03:09 PM    <DIR>          ..
12/11/2020  03:09 PM               130 .nupkg.Metadata
12/11/2020  03:09 PM             6,708 jrtestlib.0.16.20201211.7.nupkg
12/11/2020  03:09 PM                88 jrtestlib.0.16.20201211.7.nupkg.sha512
12/11/2020  03:09 PM               586 jrtestlib.nuspec
12/11/2020  03:09 PM    <DIR>          tools
               4 File(s)          7,512 bytes

 Directory of C:\Users\james\.nuget\packages\jrtestlib\0.16.20201211.7\tools

12/11/2020  03:09 PM    <DIR>          .
12/11/2020  03:09 PM    <DIR>          ..
12/11/2020  03:09 PM            11,264 bytes

     Total Files Listed:
               5 File(s)         18,776 bytes
               5 Dir(s)  388,888,588,288 bytes free

注意:.dll 文件位于 ./Tools 目录中。

更改应用项目引用此文件直接正确编译。

以下显示了打包发布 NuGet 包的任务。

YAML 管道片段
- task: NuGetCommand@2
  displayName: 'NuGet pack JReyLibrary'
  env:
    packageversion: $(packageversion)
  inputs:
    command: pack
    packagesToPack: JLReyLibrary/JReyLibrary.csproj
    versioningScheme: byEnvVar
    versionEnvVar: packageversion
    includeSymbols: true
    toolPackage: true
  enabled: true

- task: NuGetCommand@2
  displayName: 'NuGet pack JRTestLib'
  env:
    packageversion: $(packageversion)
  inputs:
      command: pack
      packagesToPack: JLReyLibrary/JRTestLib/JRTestLib.csproj
      versioningScheme: byEnvVar
      versionEnvVar: packageversion
      includeSymbols: true
      toolPackage: true
  enabled: true

- task: NuGetCommand@2
  displayName: NuGet Push
  inputs:
    command: 'push'
    packagesToPush: '$(Build.ArtifactStagingDirectory)/**/*.nupkg;!$(Build.ArtifactStagingDirectory)/**/*.symbols.nupkg'
    nuGetFeedType: 'internal'
    publishVstsFeed: 'jlr_Feed'

- task: copyFiles@2
  inputs:
   SourceFolder: '$(build.sourcesdirectory)'
   Contents: '**'
   TargetFolder: '$(build.artifactstagingdirectory)'

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

我没有看到任何有助于此的文档。

解决方法

我发现了问题!

NuGetCommand 包含选项 toolPackage: true,当它被删除时它构建了一个普通库。

解决了

节礼日快乐