所有引用子项目的项目都必须安装 NuGet 包 Microsoft.Bcl.Build (C#/Windows Phone 7)?

Posted

技术标签:

【中文标题】所有引用子项目的项目都必须安装 NuGet 包 Microsoft.Bcl.Build (C#/Windows Phone 7)?【英文标题】:All projects referencing sub-project must install NuGet package Microsoft.Bcl.Build (C#/Windows Phone 7)? 【发布时间】:2013-05-20 21:18:36 【问题描述】:

我在 Visual Studio 2012 中遇到了一个特别困难的重构会话,其中涉及一个包含多个项目的 C# 解决方案。我需要将一堆代码提取到他们自己的程序集中,以便可以在多个项目之间共享代码,所有这些都在相同的解决方案。但是,无论我尝试什么,我都会收到引用新共享项目的项目的警告“所有引用 shared project name 的项目必须安装 nuget 包 Microsoft.Bcl.Build”。

我仔细检查了依赖项目和共享项目,详细验证它们都使用相同的版本和完全相同的 DLL 用于 Microsoft.Bcl 版本 1.0.1.19 和 Microsoft.Bcl.Async 1.0.16 版包:

System.Runtime

System.Threading.Tasks

Microsoft.Threading.Task

Microsoft.Threading.Tasks.Extensions Microsoft.Threading.Tasks.Extensions.Phone

DLL 路径均已解析且相同。 XAP 文件确实构建了,但我仍然收到警告,告诉我 Microsoft.Bcl.Build 没有在依赖项目中引用,尽管我可以看到它是。

如果我尝试卸载然后使用 NuGet 为所涉及的每个项目重新安装这两个包,我将获得带有空路径的引用和所涉及的 5 个 DLL 引用的警告图标。出于某种原因,NuGet 添加了引用但找不到 DLL。此外,如果我这样做,我会发现自己经常遇到问题,即在尝试添加引用时遇到“无法添加引用”错误的项目。然后我关闭并重新打开解决方案,这导致“项目加载失败”错误。所以我必须手动编辑项目文件,删除错误的包导入语句,然后重新加载项目。

我该如何解决这个问题,以及将来避免这种头痛的一般技术是什么?让 NuGet 管理丢失的包根本没有帮助。

【问题讨论】:

【参考方案1】:

万一其他人遇到这个问题,@Swell 的解决方案让你“wtf”:

我最近浏览了一个较旧的 MVC 项目并对其进行了更新(更新了 razor、asp、http 等 nuget 包)。该项目独立于自身,构建良好,但是当我发布它时,它因 OP 错误而失败。

事实证明,这是因为我没有更新与之关联的*.Tests 项目(应该已经想到,但不确定为什么 Tests 与该项目密切相关)。所以,修复:

    右键单击解决方案并管理 nuget 包。 浏览在 web 项目中更新的所有包,并将它们也应用到其他项目(每个“更新”将显示一个包含适用项目的树,我很好,只需单击即可)。李> 重建。

你现在应该很好,它不应该对你吠叫。希望对其他人有所帮助。

【讨论】:

我的回答解决了nuget包还原问题和加载项目失败问题。【参考方案2】:

我刚遇到同样的问题,这里打开了一个错误:http://nuget.codeplex.com/workitem/3268

我所做的是以下,我将包 Microsoft.Bcl.Build 添加到解决方案级别

在我的开发环境中,如果您没有加载包,只需右键单击解决方案并选择管理 nuget 包,您会看到一个带有恢复按钮的黄色条,只需单击它就可以了。

在编译项目之前的构建脚本中,我运行以下命令:

.\myproject\.nuget\NuGet.exe install .\myproject\.nuget\packages.config -OutputDirectory .\myproject\packages

这将恢复解决方案级别的包,你会没事的。

根据问题报告,这个问题应该会在今年夏天结束时在 2.7 版中修复

【讨论】:

我刚刚在我的应用程序中更新了 NuGet 包,现在我收到关于需要安装 Microsoft.Bcl.Build 的相同警告消息。我不知道正在讨论的整个“恢复”事情是什么。我没有看到任何“带有恢复按钮的黄条”的迹象。我的解决方案包含一个引用主项目的 Azure 部署项目,但 Visual Studio 2012 UI 不提供用于管理该项目的 NuGet 包的上下文菜单选项。有什么想法或建议吗? @Bob.at.SBS 关闭 VS。在文件资源管理器中,打开您的解决方案文件夹,进入您的 .nuget 文件夹并编辑您的 packages.config。在包节点中添加这一行 。现在,重新打开您的解决方案并右键单击您的解决方案 -> 管理 Nuget 包以获取解决方案。将出现黄色条。 为了完成我的回答,Microsoft.Bcl.Build 是一个目标文件,VS 要求它加载您的项目。当您点击恢复时,它将恢复包,您将能够重新加载丢失的项目! 我的解决方案文件夹(或该文件夹树下的任何位置)中没有 .nuget 文件夹。我的每个项目文件夹(Azure 项目文件夹除外)都包含一个 packages.config 文件。 Azure 项目文件夹包含一些包含 packages.config 文件的神秘子文件夹。 您是否为您的解决方案启用了包还原?

以上是关于所有引用子项目的项目都必须安装 NuGet 包 Microsoft.Bcl.Build (C#/Windows Phone 7)?的主要内容,如果未能解决你的问题,请参考以下文章

NuGet - 在单一解决方案中管理和删除多版本包

手动删除引用nuget如何还原

使用来自 Xcode 4 子项目的静态库和捆绑产品

恢复 Nuget 引用?

在Visual Studio 2019中重新安装Nuget包管理器

VS/MSBUILD:复制子项目的输出文件,不添加对exe的引用