使用 Team Foundation Server 缺少依赖项创建 NuGet

Creating NuGet using Team Foundation Server missing dependencies

我在 .net 标准 2.0 中创建了一个简单的 class 库,其中包含一些 nuget 依赖项,例如 Dapper。

我正在使用 Team Foundation Server 16 构建和打包项目。我的问题是,当我浏览到我的新 NuGet 包时,它没有在 VS 的 NuGet 包管理器中列出它的依赖项,之后我必须手动安装它们。

从 Visual Studio 2019 创建相同 class 库的 nuget 包在本地按预期工作。

我在 TFS 上的构建任务是:

  1. 使用 nuget 5.4.0
  2. NuGet 恢复
  3. 构建解决方案
  4. 运行脚本(更新版本号的.bat文件)
  5. NuGet 包
  6. 发布构建工件

NuGet 包使用命令 "pack" 的默认设置和仅指向 .csproj 文件的路径。

Creating a nuget package of the same class library from Visual Studio 2019 locally works as intended.

这是一个关于 nuget pack 命令的问题。当你在本地VS中打包.net standard项目时,它(右键=>打包按钮)实际上调用dotnet cli而不是nuget.exe来做pack 工作。

目前,nuget pack 命令不能很好地与那些使用 PackageReference 管理 nuget 包的项目一起使用。 (包括 .net framework 个项目以及 PackageReference.net core.net standard 个项目)。

更多细节见讨论here and here

To resolve that issue(For TFS2017 and above):

使用dotnet pack command instead of nuget pack 命令。对于 tfs 中的管道,使用 dotnet restore、build、pack 任务而不是 nuget restore、nuget pack 任务。

TFS2016 更新 1:

由于TFS会在tfs agents中运行那些任务,另一种方法是手动安装.net core sdk,然后使用command-line task执行dotnet pack命令来创建nuget包。

.net core sdk 下载 link here.

更新2:

此外,我们仍然可以使用nuget pack command/task。要包含这些依赖项,我们需要创建一个额外的 xx.nuspec 文件,其内容类似于:

<?xml version="1.0" encoding="utf-8"?>
<package >
  <metadata>
    <id>PackageName</id>
    <version>1.0.0</version>
    <title>xxx</title>
    <authors>xxx</authors>
    <owners>xxx</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <license type="expression">MIT</license>
    <description>xxx</description>
    <releaseNotes>xxx</releaseNotes>
    <copyright>Copyright 2020</copyright>
    <tags>Tag1 Tag2</tags>
    <dependencies>
        <dependency id="Dapper" version="1.30.0"/>
        //define other dependencies manually here. 
   </dependencies>
  </metadata>
</package>

将此文件放在 xx.csproj 存在的同一目录中,然后 nuget pack command/task 现在可以创建具有依赖项的包。