【问题标题】:NuGet: pack command is NOT including nuget dependenciesNuGet:pack 命令不包括 nuget 依赖项
【发布时间】:2012-03-14 00:39:55
【问题描述】:

我有以下设置:

  • nuget.exe 版本:1.6.21205.9031
  • 项目 A.csproj 打包到 A.1.0.0.0.nupkg,并发布到本地 IIS 上托管的 LOCAL 包存储库(我的 VS Nuget 扩展我能够将 A 包添加到新项目)
  • B.csproj 项目依赖于我使用 VS Nuget 扩展添加的 A 包

现在,当我跑步时

nuget spec

B.nuspec 已创建。

然后我跑

nuget pack B.csproj -verbose

但是在创建的 B 包中,它们对 A 包没有依赖性。 nuget pack 命令告诉我它已找到 packages.config 文件(其中包含对 A 包的依赖项),但随后显示“依赖项:无”。

我错过了什么?问题可能是只能在我的本地包存储库中找到 A 包吗?如何让 nuget.exe 知道这个本地存储库?

非常感谢!

【问题讨论】:

  • 我也很想知道这个问题的答案。文档指出 nuget pack B.csproj 步骤应该包含依赖项,但它不适合我。
  • 这里仍然存在同样的问题,列出的解决方案都不起作用。
  • 看起来我遇到了同样的问题,就我而言,实际上包含了三分之一的依赖项

标签: dependencies package nuget


【解决方案1】:

nuget pack 需要能够找到packages 文件夹以解决依赖关系(请参阅http://nuget.codeplex.com/workitem/3097),或者在与.csproj 相同的文件夹中(只要有一个.sln 文件一级在它上面)或在NuGet.Config指定的文件夹中。

【讨论】:

  • +1 我在 Nuget.Config 中将 packages 文件夹自定义为 nuget-packages。重命名它为我解决了这个问题。
  • 如果 NuGet 无法将依赖项添加到其依赖项列表中,人们可能会认为它会失败,或者至少会发出警告,因为这会导致生成具有不完整依赖项列表的错误包。我希望有一个选项可以在此类问题上失败,而不是“成功完成”并让包的用户找出为什么事情不适合他们。
  • 链接因站点移动而中断,新位置上的问题 3097 似乎与此无关。非常感谢您能在新位置找到相同的问题并更新链接。
  • 您仍然可以在 Codeplex 上找到问题,只需单击屏幕顶部的问题并搜索““Nuget pack”忽略 packages.config 中的依赖项” 将问题转发至 github.com/NuGet/Home/issues/8643
【解决方案2】:

我想我可能已经想通了……

我们的库解决方案启用了 Nuget 包还原。我关闭了 NuGet 包还原,然后在创建 NuGet 包时包含了项目依赖项。

我不太确定为什么在打开包还原时依赖项没有包含在包中,但是哦,好吧:)。

【讨论】:

    【解决方案3】:

    'Nuget.exe spec A.csproj' 将创建一个没有任何依赖关系的非常薄的 NuSpec 文件。对于我们的流程,使用 powershell 脚本将项目引用和其他依赖项从项目的 packages.config 添加到 B.nuspec 中的 <dependency> 节点。

    'Nuget.exe pack A.nuspec' 将是正确的。

    【讨论】:

    • 请注意,OP 将 nuget pack 与 .csproj 文件一起使用。这旨在将 .csproj 中记录的依赖项考虑在内,包括使用 nuget 添加的依赖项以及对同一解决方案中具有 .nuspec 文件的其他项目的任何引用。
    【解决方案4】:

    here 提出了类似的问题,答案解释为:

    这些导致问题的原因是因为 NuGet 会查找解决方案级别的包文件夹来决定要拉入哪些包依赖项(不太确定如何做出此决定)。如果该包文件夹的路径不正确(就像 NuGet 使用错误的解决方案文件一样),则它无法正确解析依赖项。另外如果packages文件夹为空,也无法正确解析依赖。

    我遇到了同样的问题,将解决方案文件添加到项目文件夹(以前没有解决方案)帮助我解决了问题。

    【讨论】:

      【解决方案5】:

      我缺少依赖项,因为我在 packages 文件夹中没有我正在使用的所有包的 *.nupkg 文件。

      这很难追踪,因为nuget pack 的输出看起来像是在工作:

      Found packages.config. Using packages listed as dependencies
      

      我一直在使用GitHub's Visual Studio .gitignore,只注释掉了关于“包还原”的一行(因为我想提交我的包),但我应该注释掉两行。它应该是这样的:

      # NuGet Packages
      # *.nupkg
      # The packages folder can be ignored because of Package Restore
      # **/packages/*
      

      感谢Rick Mohr's answer链接到CodePlex work item 3097,飞凌解释了packages文件夹的使用方式:

      因为packages.config 只包含一个包列表,并且不包含 包含这些包之间的依赖关系,nuget需要 访问这些包文件以获取依赖项信息。这就是为什么它 需要知道包文件夹。

      飞凌所指的依赖信息在*.nupkg文件中。一旦我更改了 .gitignore 并提交了所有缺少的 *.nupkg 文件,我的 TeamCity 构建服务器就能够成功地创建具有正确依赖项的 NuGet 包。

      【讨论】:

      • 对于 nuget 假设项目的唯一依赖项是其他 nuget 包是一个很大的失败。当然,项目通常依赖于同一解决方案中的其他项目。
      猜你喜欢
      • 2017-09-24
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2014-08-20
      • 1970-01-01
      • 2019-03-19
      • 1970-01-01
      相关资源
      最近更新 更多