【问题标题】:Not using package restore, but still getting "must install nuget package Microsoft.Bcl.Build"不使用包还原,但仍然得到“必须安装 nuget 包 Microsoft.Bcl.Build”
【发布时间】:2013-12-05 14:16:44
【问题描述】:

我正在开发一个使用 nuget 但不使用包还原的项目。 (顺便说一句,这是我无法控制的决定,因此任何涉及启用包还原的答案都不是我能够使用的。)

解决方案中的少数项目(总共 34 个项目中的 4 个;一个 WinJS 应用商店项目、两个普通 .NET 类库和我的一个 Azure 云项目)报告了这个臭名昭著的警告:

...packages\Microsoft.Bcl.Build.1.0.13\tools\Microsoft.Bcl.Build.targets(225,5): warning : All projects referencing Valhalla.Consumer.Core.csproj must install nuget package Microsoft.Bcl.Build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317569.

该链接假定我要打开包恢复。到目前为止,我设法找到的关于这个主题的所有其他建议也是如此。

顺便说一句,我尝试在选项 -> 包管理器 -> 常规设置中禁用包还原。这无济于事(即使有,也是不可取的——我在其他所有工作中都使用包还原)。

我真的不明白为什么我会在不使用包还原的解决方案中得到这个。据我了解,它要求的软件包的全部意义在于支持软件包还原。因此,在不使用包还原的解决方案中,出现此包似乎很奇怪。

但是,似乎某些其他 nuget 包会导致您依赖它。我有一个使用 Microsoft.Bcl 的 Windows 运行时组件项目,这是一个 nuget 包,由于某种原因,它依赖于 Microsoft.Bcl.Build。 (当我创建项目时,Visual Studio 似乎为我添加了 Microsoft.Bcl 包。大概这是必要的。)其他项目似乎通过 HTTP 客户端库获得了对 Microsoft.Bcl.Build 的依赖。

显然,某些常见的 nuget 包似乎会强制依赖 Microsoft.Bcl.Build,无论您是否使用包还原。

如果您可以简单地通过将相关包添加到所有收到此警告的项目中来消除警告,那就没问题了。但令人烦恼的是,即使我将 Microsoft.Bcl.Build 包添加到消费组件(例如,我的 WinJS Window Store 应用程序),我仍然会收到此警告! (所以它继续抱怨我需要安装 nuget 包,即使我已经安装了它。)

有谁知道在这种情况下如何消除此警告?做它要求我做的事情似乎还不够。缺少什么?

【问题讨论】:

  • 您是否尝试按照 Microsoft.Bcl.Build.targets 文件中的建议在项目中使用 SkipValidatePackageReferences 属性?
  • 虽然这样可以摆脱它,但它不会也阻止合法的警告吗?如果项目 U 使用项目 P,则 U 应该具有与 P 相同的所有 nuget 包。通常,nuget 会检查并告诉您是否缺少某些内容,但此设置会禁用该检查。当我真的错过了一个包裹时,我想收到警告,但当我确实有参考时,我不会收到关于 Microsoft.Bcl.Build 的警告。
  • 不知道是否在 NuGet v2.7+ 中启用了 OOTB 包还原这一事实是否有用(知道 Microsoft.Bcl.Build 的 zilch)
  • 我们已经在使用 NuGet 2.7。包还原不是此项目的选项(出于我无法控制的原因)。 Microsoft.Bcl.Build 的存在纯粹是为了支持包还原,AFAIK。但不幸的是,一些 NuGet 包依赖它,即使你没有使用包还原,也会迫使你依赖它。

标签: visual-studio nuget nuget-package-restore


【解决方案1】:

我有同样的问题。将 Microsoft.Bcl.Build 包从 1.0.13 更新到 1.0.14 解决了我的问题。

【讨论】:

  • 我已经在使用 vs 2013 社区更新 4 的 1.0.14,我收到了警告。我该怎么办?
  • @FrankSposaro 要安装哪个版本?
  • 我们正在使用 VS Community Ed 2013 更新 5。安装 Microsoft.Net.Http (2.2.29) 也安装了 Microsoft.Bcl.Build 1.0.14。我们手动将 Bcl.Build 更新为 1.0.21,但仍然收到相同的警告。 BTW VS 必须重新启动才能删除以前的版本,现在 .csproj 也有一个新的<NuGetPackageImportStamp> 节点
  • 更新然后我们在(少数)引用初始包的项目中安装了 Bcl、Bcl.Build 和 Net.Http 包,警告消失了。
【解决方案2】:

我们最近遇到了同样的问题。使用 Nuget 2.8,BCL build 1.0.14,BCL 1.1.9,我们有一个使用 BCL build 的项目 A,它被另一个项目 B 引用。

简短的故事:项目 B 编译给出了上述错误,尽管已将打包添加到其中。解决方案是删除软件包并重新添加它们。我们最终为项目 A 和 B 都这样做了。

我认为问题的原因是版本不匹配。原始项目引用 BCL 1.1.8(创建时的最新版本),而项目 B 自动使用更新的 BCL 1.1.9。

我不确定这是否相关,但我们第一次使用项目->NuGet 包管理器添加包,第二次我们使用 NuGet 控制台(工具->Nuget->控制台)。

remove,add 导致项目 B 的 csproj 明显不同。 添加了以下几行:

<Import Project="..\..\..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\..\..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" />

【讨论】:

    猜你喜欢
    • 2015-03-19
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多