不使用包还原,但仍然收到“必须安装nuget包Microsoft.Bcl.Build”的消息。

14
我正在处理一个使用NuGet的项目,但不使用包恢复功能。 (顺便说一下,这是一项在我的控制范围之外的决定,因此任何需要启用包恢复的答案我都将无法使用。)
在解决方案中有几个项目(共34个;一个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软件包会导致您依赖于此。 我有一个Windows Runtime组件项目,其中使用了Microsoft.Bcl,这是一个NuGet软件包,由于某种原因具有对Microsoft.Bcl.Build的依赖关系。 (创建项目时,Visual Studio似乎已经为我添加了Microsoft.Bcl软件包。 可能是必要的。)其他项目似乎通过HTTP客户端库获取对Microsoft.Bcl.Build的依赖关系。
因此,显然,某些常见的NuGet软件包似乎会强制依赖于Microsoft.Bcl.Build,无论您是否使用包恢复。
如果可以简单地向收件人部分添加相关软件包来消除警告,那就没问题了。 但是让人烦恼的是,即使我向消费者组件(例如,我的WinJS Window Store应用程序)添加了Microsoft.Bcl.Build软件包,我仍然会收到此警告! (因此,即使我已安装软件包,它仍然会抱怨我需要安装NuGet软件包。)
有没有人知道如何在这种情况下消除此警告? 做它要求我做的事似乎不足以解决问题。 缺少什么?

1
你尝试在项目中使用Microsoft.Bcl.Build.targets文件中建议的SkipValidatePackageReferences属性了吗? - Matt Ward
虽然这样做可以消除警告,但它也会阻止合法的警告吗?如果项目U使用项目P,则U应该具有与P相同的所有NuGet包。通常,NuGet会检查并告诉您是否缺少某些内容,但此设置禁用了该检查。我希望在确实缺少软件包时收到警告,但在确实引用了Microsoft.Bcl.Build时不要收到警告。 - Ian Griffiths
不知道NuGet v2.7+中启用OOTB的Package Restore是否有用(对Microsoft.Bcl.Build一无所知)。 - Ruben Bartelink
我们已经在使用NuGet 2.7。由于某些原因,此项目无法使用包还原(Package Restore)功能。据我所知,Microsoft.Bcl.Build仅是为了支持包还原而存在的。但不幸的是,一些NuGet包依赖于它,即使您不使用包还原,也会被迫依赖它。 - Ian Griffiths
2个回答

7

我曾经遇到过同样的问题。将Microsoft.Bcl.Build包从1.0.13更新至1.0.14就解决了我的问题。


我已经使用VS 2013社区更新4的1.0.14版本,但是我收到了警告。我该怎么办? - Julian50
@FrankSposaro你安装了哪个版本? - Julian50
我们使用的是VS Community Ed 2013 update 5。安装Microsoft.Net.Http(2.2.29)时,也会安装Microsoft.Bcl.Build 1.0.14。我们手动更新了Bcl.Build至1.0.21,但仍然收到相同的警告。顺便提一下,为了删除先前的版本,VS必须重新启动,现在.csproj还有一个新的<NuGetPackageImportStamp>节点。 - superjos
更新:然后我们在(少数)引用初始项目的项目中安装了Bcl、Bcl.Build和Net.Http包,警告消失了。 - superjos

4
我们最近遇到了同样的问题。使用Nuget 2.8、BCL build 1.0.14、BCL 1.1.9,我们有一个使用BCL build的项目A,被另一个项目B所引用。
简单来说:尽管包已经添加到项目B中,但编译项目B时出现了上述错误。解决方案是删除这些包并重新添加它们。我们最终对项目A和B都进行了这样的操作。
我认为问题的原因是版本不匹配。原始项目引用了BCL 1.1.8(它创建时的最新版本),而项目B自动使用了更新的BCL 1.1.9。
我不确定这是否相关,但第一次我们使用项目->NuGet包管理器添加了包,第二次我们使用了NuGet控制台(工具->Nuget->控制台)。
删除和添加导致了项目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')" />


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接